日期:2014-05-16  浏览次数:20728 次

我希望!=比较运算符返回true,运行结果未达到我的期待

        class c
        {
            public static int i = 0;
            public int GetHashCode() { return i++; }
        }

主程序里面有

Console.WriteLine(obj1 != obj2);


打印的结果是False,并不是我的预期: 我既然在class c里面这里重载了GetHashCode,而且每次的返回值都是不相等的。为什么!=仍然返回false呢?
------解决方案--------------------
有些数据结构用GetHashCode来做快速判断,但对‘比较’本身来说,GetHashCode并不是必要的

这些数据结构有Dictionary,HashSet等:

class C
{
    public static int i = 0;
    public override int GetHashCode() { return i++; }
}

static void Main(string[] args)
{
    C obj1 = new C();
    HashSet<C> hashSet = new HashSet<C>(new C[] { obj1, obj1 });
    int count = hashSet.Count; // 2 (如果把GetHashCode override去掉,就是1)
}