今天刚学习了重写EQUALS方法 
但是好像没听懂  也不知道它的实现机制是什么
好像也不是很清楚到底该怎么用
如下是我的代码:
public static void Main(string[] args)
        {
            //生成泛型LIST
            List<Car> list = new List<Car>();
            Car car1 = new Bus("公公1","黑色",20);
            Car car2 = new Bus("公公2", "黑色", 20);
            Car car3 = new Bus("公公3", "黑色", 20);
            //添加元素到LIST
            list.Add(car1);
            list.Add(car2);
            list.Add(car3);
            //添加相同项
            Bus car4 = new Bus("公公2", "黑色", 20);
            list.Add(car4);
            //移除此项
            list.Remove(car4);
            //遍历输出RUN方法
            foreach(Bus bus in list)
            {
                bus.Run();
            }
            Console.Read();
        }————————————————————————————————————————————
这是我的重写EQUALS public override bool Equals(object obj)
        {
            Bus bus= obj as Bus;
            if (bus == null) return false;
            if (bus.Color == this.Color && bus.Name == this.Name && bus.PassengerNum == this.PassengerNum)
            {
                return true;
            }            return false;
        }——————————————————————————————————————————————不知道是我理解错误 还是没有搞懂这个重写是什么作用用了这个好像没什么效果
不知道从哪里体现出来。。查了下  好像是说 我添加到LIST里一个CAR4   (CAR4和CAR2)是同样的数据
然后删除CAR4的同时 CAR2  也删除了  不知道是不是这个概念  还是我的代码有错误请各位指教。。

解决方案 »

  1.   

    实现重写了Equals之後,一般都要再重写GethashCode方法.
    以你的代码来说,执行
                //移除此项 
                list.Remove(car4); 
    後,删掉的不是Car4而是Car2, 因为你让car2跟car4相等了(在你的Equals方法内)TRY:
            public Bus(string name,string color,int num)
            {
                this._color = color;
                this._name = name;
                this._num = num;
            }
            public string Color
            {
                get { return _color; }
                set { _color = value; }
            }
            public string Name
            {
                get { return _name; }
                set { _name = value; }        }
            public int PassengerNum
            {
                get { return _num; }
                set { _num = value; }
            }
            public override bool Equals(object obj)
            {
                Bus bus = obj as Bus;
                if (bus == null) return false;
                if (bus.Color == this.Color && bus.Name == this.Name && bus.PassengerNum == this.PassengerNum && this.GetHashCode()==bus.GetHashCode()  ) //加上HashCode的判等.
                {
                    return true;
                }            return false; 
                
            }
            public override string ToString()
            {
                return string.Format("Name={0},Color={1},Num={2}", _name, _color, _num);
            }
            public override int GetHashCode()  //重写GetHashCode,你可以自己往里面加自己的hash函数
            {
                return base.GetHashCode();
            }
        }这样你list.Remove(car4)后,删掉就是car4而不是car2了。
      

  2.   

    麻烦高手看下小弟的菜鸟问题:http://topic.csdn.net/u/20090423/13/6c91a301-92de-4d7a-b607-8c39c5affae6.html
      

  3.   

    你List声明添加的是Car类型的啊
    怎么能往里面添加Bus类型的#24..纳闷
      

  4.   

    回楼上   CAR是BUS的父类
      

  5.   


    我想要的效果是  在删除CAR4的同时  也删除CAR2。。毕竟他们是相同的。   不知道EQUALS是否能做这个事