首页 新闻 会员 周边 捐助

C#为何属性和取值相同的dynamic对象的GetHashCode()相同,直接比较两者却又不同??

0
[已解决问题] 解决于 2015-10-22 12:26
var obj1 = new { Age = 12, Name = "Jack" };
            var obj2 = new { Age = 12, Name = "Jack" };

            Console.WriteLine("obj1 == obj2: 【{0}】", obj1 == obj2);
            Console.WriteLine("obj1.GetHashCode() == obj2.GetHashCode(): 【{0}】", obj1.GetHashCode() == obj2.GetHashCode());
            Console.ReadLine();

输出结果如下:

oct的主页 oct | 菜鸟二级 | 园豆:204
提问于:2015-09-10 23:05
< >
分享
最佳答案
0

对于引用类型,==比较的不仅仅是HashCode相同,还需要是相同的引用,你用.Equals的话就是相同的,通常情况下,应当自己重载GetHassCode方法,您可以参阅《CLR via C#》 5.4节

奖励园豆:5
稳稳的河 | 老鸟四级 |园豆:4216 | 2015-09-11 09:24
其他回答(2)
0

你这里GetHashCode是Object的方法,针对不同类型,应该重写GetHashCode,这样GetHashCode才有意义

zhoumy | 园豆:603 (小虾三级) | 2015-09-11 09:00
0

==相同的话则GetHashCode返回的肯定相同,反之则不一定的。

你需要dynamic对象相等的逻辑的话,要自己写的。

hsdtt | 园豆:293 (菜鸟二级) | 2015-09-11 09:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册