Хеш-код в словаре <TKey, TValue>
Я играл со словарем и наткнулся на сценарий ниже
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.
}
}
У меня есть класс MyObject, который действует как ключ к словарю, и я переопределяю метод GetHashCode, чтобы вернуть хеш-код на основе значений, хранящихся в классе.
Таким образом, когда вышеуказанный код выполняется, оба объекта obj1 и obj2 возвращают один и тот же хэш-код, но все же словарь выдает исключение KeyNotFound.
Есть причина, почему такое поведение?