c# gethashcode和equal重写

重写一个类的 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;
        }
    }


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值