我写在C#下面的代码:平等和hashCode碰撞
public class Person
{
private string idNumber;
private string personName;
public Person(string name, string id)
{
this.personName= name;
this.idNumber= id;
}
public override bool Equals(Objectobj)
{
Person personObj= obj as Person;
if(personObj== null)
return false;
else
return idNumber.Equals(personObj.idNumber);
}
public override int GetHashCode()
{
return this.idNumber.GetHashCode();
}
}
public static void Main()
{
Person p1 = new Person("John", "63412895");
Person p2 = new Person("Jack", "63412895");
Console.WriteLine(p1.Equals(p2));
Console.WriteLine(Object.Equals(p1, p2));
}
我不明白为什么第二Console.WriteLine()
返回true ??? 第一次返回true,因为我覆盖了等于的方法。 但第二个涉及在对象类中相等。请解释一下 。
如果你的代码完全像我怀疑它编译 – csharpwinphonexaml
我希望这是一个复制粘贴问题public override bool Equals(Objectobj)' – csharpwinphonexaml
我注意到这是一个来自[这里]的示例(https:// msdn。 microsoft.com/en-us/library/bsc2ak47%28v=vs.110%29.aspx):) 请注意,这里是重写Equals方法,以便这些操作给出相同的结果: p1.Equals(p2) p2。 Equals(p1) Object.Equals(p1,p2) Object.Equals(p2,p1) 此外,哈希码仅由相同的idNumbers创建。 – marcinax