【发布时间】:2016-04-16 13:45:46
【问题描述】:
只是想让有人确认我的想法,我在 Foo 类中尝试了覆盖 Equals 和 GetHashCode 的不同组合:
class Foo
{
static int n;
public override bool Equals(object obj)
{
return true;
//return false;
}
public override int GetHashCode()
{
return 0;
//return n++;
}
}
然后测试结果显示:
static void Main(string[] args)
{
HashSet<Foo> set = new HashSet<Foo>();
Foo f1 = new Foo();
Foo f2 = new Foo();
Console.WriteLine(f1.Equals(f2));
set.Add(f1);
Console.WriteLine(set.Contains(f2));
Console.ReadLine();
}
- 当 Equals 为真时,Contains 由 GetHashCode 确定;
- 当 Equals 为 false 时,Contains 始终为 false。
所以 包含 由 Equals 确定,然后由 GetHashCode 确定,对吗?
【问题讨论】:
-
您可以通过在每个被覆盖的方法中添加
Console.WriteLine来轻松确认您的想法,以查看它们出现的顺序。
标签: c# .net dictionary hashset