Ich habe gelesen, dass, wenn Sie überschreiben Equals auf eine Klasse/Objekt Sie GetHashCode überschreiben müssen.
public class Person : IEquatable<Person>
{
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public Person(int personId, string firstName, string lastName)
{
PersonId = personId;
FirstName = firstName;
LastName = lastName;
}
public bool Equals(Person obj)
{
Person p = obj as Person;
if (ReferenceEquals(null, p))
return false;
if (ReferenceEquals(this, p))
return true;
return Equals(p.FirstName, FirstName) &&
Equals(p.LastName, LastName);
}
}
Nun ist folgendes gegeben:
public static Dictionary<Person, Person> ObjDic= new Dictionary<Person, Person>();
public static Dictionary<int, Person> PKDic = new Dictionary<int, Person>();
Wirkt sich das Überschreiben von GetHashCode nicht auf die beiden oben genannten Dictionarys aus? Was ich im Grunde frage ist, wie wird GetHashCode generiert? Wenn ich trotzdem nach einem Objekt in PKDic suche, kann ich es dann anhand des PK finden? Wenn ich GetHashCode außer Kraft setzen wollte, wie würde ich das tun?