我寫在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