Bill_Category a = new Bill_Category(IOIDCategory.CategoryReg_ID, 1); Bill_Category b = new Bill_Category(IOIDCategory.CategoryReg_ID, 1); if (a.Equals(b)) { } else { }
还有另外一个问题,在idList里面有和a值都一样的实体,可是为什么最后结果却是false呢。。。
if (idList.Contains(a)) { totalPrice = categoryAnay.BuyPrice + totalPrice; } else { return Content("<script>alert('没有购买对应的注册订单,请先购买对应的注册订单!');location.href='/useraccount/categoryRegList?show=0'</script>"); }
对于Equal,1楼说得很好。
对于Contains,有三种情况:
1、ICollection中的Contains接口方法(List:IList:ICollection)。用于比较元素是否在容器中,采用的是引用地址比较。
2、string类型的方法,比较指定的字符串,是否在原始字符串中。
3、扩展方法Contains<T>,是来自于Enumerable的扩展方法,同样是用于比较是否在容器中,默认采用引用地址比较,可以自定义比较器。方法签名:public static bool Contains<TSource>(this IEnumerable<TSource> source, TSource value, IEqualityComparer<TSource> comparer);
十分感谢。。。。
因为equals()方法默认是简单的==比较,也就是比较内存地址。只不过String字符串类自己重写了equals方法。所以你应该重写Bill_Category类的equals()方法。
十分感谢
对象最好不要用equals
谢谢帮助。。。。
想要一样,需要重载equals.
谢谢
第一个问题:主要是你new了两次对象,就相当于创建了两个新的对象,而Equals表示的是两个相同的对象
第二个问题 :对于Contains它只表示b是不是出现在a字符串中比较的是字符串里面的值而不是对象
谢谢
对1L已经说明白了,对于引用类型equals是比较的内存地址是否相同,你实例了两个对象,内存地址肯定是不相同的,所以返回的是false.
十分感谢