Hash-Code im Wörterbuch <TKey, TValue>

Ich habe mit Dictionary rumgespielt und bin über das folgende Szenario gestolpert

public class MyObject
{
    public string I { get; set; }
    public string J { get; set; }
    public string K { get; set; }

    public override int GetHashCode()
    {
        int hashCode = (I+J+K).GetHashCode();
        Debugger.Log(9, "INFO", hashCode.ToString() + System.Environment.NewLine);
        return hashCode;
    }
}
class Program
{
    static void Main(string[] args)
    {
        MyObject obj1 = new MyObject() { I = "Hello", J = "World" };
        MyObject obj2 = new MyObject() { I = "Hello", J = "World" };

        Dictionary<MyObject, string> collection = new Dictionary<MyObject, string>();
        collection.Add(obj1, "1");
        var result = collection[obj2]; // KeyNotFound exception here.
    }
}

Ich habe die MyObject-Klasse, die als Schlüssel für das Wörterbuch fungiert, und ich überschreibe die GetHashCode-Methode, um Hash-Code basierend auf den in der Klasse gespeicherten Werten zurückzugeben.

So, wenn der obige Code ausgeführt wird, geben sowohl obj1 als auch obj2 denselben Hash-Code zurück, aber das Wörterbuch löst immer noch eine KeyNotFound-Ausnahme aus.

Jeder Grund, warum so ein Verhalten?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage