c# gethashcode和equal重写

来源:互联网 发布:我国近年财政补贴数据 编辑:程序博客网 时间:2024/05/19 15:42

重写一个类的 Equals方法,必须要重写它的gethashcode方法,在比较2个对象是否相等时,调用equals方法,2个对象可以有不同的hashcode,但Equals返回的却是TRUE,所以2个对象相等与否,只与它的Equals方法的返回值有关

注:在List<Object> list.contains();时,判断是否包含也是通过equals方法

 static void Main(string[] args)        {            Dog d1 = new Dog(1,"shaojun");            Dog d2 = new Dog(2,"xiaohei");            List<Dog> dlist = new List<Dog>();            dlist.Add(d1);            dlist.Add(d2);            Dog d3 = new Dog(1, "shaojun");            Dog d4 = new Dog(11, "shaojun");            Console.WriteLine(dlist.Contains(d3));            Console.WriteLine(dlist.Contains(d4));            dlist.Remove(new Dog("shaojun"));            prinf(dlist);            Console.WriteLine(d1.Equals(d3));                    }        public static void prinf(List<Dog> dlist)        {            foreach(Dog d in dlist){                Console.WriteLine("id:"+d.id+",name:"+d.name);            }        }


public class Dog    {        public Dog() { }        public Dog(string _name)        {            name = _name;        }        public Dog(int _id,string _name)        {            id = _id;            name = _name;        }        public int id { get; set; }        public string name { get; set; }        public override int GetHashCode()        {            return id;        }        public override bool Equals(object obj)        {            //判断与之比较的类型是否为null。这样不会造成递归的情况            if (obj == null)                return false;            if (GetType() != obj.GetType())                return false;            Dog d = (Dog)obj;            //if (this.GetHashCode() == d.GetHashCode())            //    return true;            if (name.Equals(d.name))                return true;            return false;        }    }


0 2
原创粉丝点击