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