有个我自己定义的类A
我所要实现的就是如果:A a1=new A();
                        a1.name="aaa";
                      与 A a2=new A();
                         a2.name="aaa"; 
                      那么,a1==a2,所以我写了下面的类!
class A
    {
        public string name = "";        public static bool operator !=(A a1, A a2)
        {
            bool flag = false;
            if (a1.name != a2.name)
            {
                flag = true;
            }
            return flag;
        }
        public static bool operator ==(A a1, A a2)
        {
            bool flag = false;            if (a1.name == a2.name)
            {
                flag = true;
            }
            return flag;
        }
    }
但是我把这个类的实例放入集合中就不行了,如下面的代码断:
 Dictionary<A, string> id = new Dictionary<A, string>();
            A a1 = new A();
            a.name = "aaa";            A a2 = new A();
            a1.name = "aaa";            id.Add(a, "aaa");            if (id.ContainsKey(a2))  //出问题的就是这个方法,明明是包含了相同的键值,但是结果显示不包含
            {
                MessageBox.Show("包含!");
            }
            else
           {
                MessageBox.Show("不包含!");
             }
如果我把键值换成string 类型,就没有问题,不知道为什么,大家帮助看一下,我也尝试着把A类中的GetHashCode,与Equals方法,重写也不解决问题,如果按照hash表的特性,应该是比较GetHashCode 这个方法返回的值是否存在,可是这个问题还是没有解决。大家有空 帮看看

解决方案 »

  1.   

    你认为这两个对象是相等的,但是HashTable不这么认为阿,
    你要重写的应该是ContainsKey()方法
      

  2.   

    那为什么string 就可以呀,我想改造不应该在Dictionary<A, string>改造,应该对A类进行改造
      

  3.   

    我试了一下,重写GetHashCode,与Equals方法是可以的,
    楼主再试一下?string之所以可以我想是因为在这里是把string作为值类型了
      

  4.   

    GetHashCode这个方法我只是简单的返回了1,
    只要保证GetHashCode返回的值相同的两个对象也是Equal的,就没问题啊要不把你的GetHashCode,与Equals这两个方法的代码贴上来