首页 新闻 搜索 专区 学院

为什么这两个实体都是一样的值为什么不相等呢?

0
悬赏园豆:5 [已解决问题] 解决于 2014-07-18 10:43
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>");
 }
C#
羽商宫的主页 羽商宫 | 老鸟四级 | 园豆:2493
提问于:2014-07-17 18:30
< >
分享
最佳答案
1

对于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);

收获园豆:5
幻天芒 | 高人七级 |园豆:36594 | 2014-07-17 23:42

十分感谢。。。。

羽商宫 | 园豆:2493 (老鸟四级) | 2014-07-18 10:44
其他回答(5)
0

因为equals()方法默认是简单的==比较,也就是比较内存地址。只不过String字符串类自己重写了equals方法。所以你应该重写Bill_Category类的equals()方法。

ThreeTree | 园豆:1490 (小虾三级) | 2014-07-17 18:43

十分感谢

支持(0) 反对(0) 羽商宫 | 园豆:2493 (老鸟四级) | 2014-07-18 10:44
0

对象最好不要用equals

无限REIZ | 园豆:4 (初学一级) | 2014-07-17 19:32

谢谢帮助。。。。

支持(0) 反对(0) 羽商宫 | 园豆:2493 (老鸟四级) | 2014-07-18 10:45
0

想要一样,需要重载equals.

forhells | 园豆:519 (小虾三级) | 2014-07-17 19:34

谢谢

支持(0) 反对(0) 羽商宫 | 园豆:2493 (老鸟四级) | 2014-07-18 10:45
0

  第一个问题:主要是你new了两次对象,就相当于创建了两个新的对象,而Equals表示的是两个相同的对象

第二个问题 :对于Contains它只表示b是不是出现在a字符串中比较的是字符串里面的值而不是对象

IT_小子 | 园豆:17 (初学一级) | 2014-07-17 20:23

谢谢

支持(0) 反对(0) 羽商宫 | 园豆:2493 (老鸟四级) | 2014-07-18 10:45
0

对1L已经说明白了,对于引用类型equals是比较的内存地址是否相同,你实例了两个对象,内存地址肯定是不相同的,所以返回的是false.

Alex_QY1987 | 园豆:1888 (小虾三级) | 2014-07-18 09:44

十分感谢

支持(0) 反对(0) 羽商宫 | 园豆:2493 (老鸟四级) | 2014-07-18 10:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册