Предположим, что у меня было следующее определение класса и структуры, и каждый из них использовал их как ключ в словаре:
public class MyClass { }
public struct MyStruct { }
public Dictionary<MyClass, string> ClassDictionary;
public Dictionary<MyStruct, string> StructDictionary;
ClassDictionary = new Dictionary<MyClass, string>();
StructDictionary = new Dictionary<MyStruct, string>();
Почему это работает:
MyClass classA = new MyClass();
MyClass classB = new MyClass();
this.ClassDictionary.Add(classA, "Test");
this.ClassDictionary.Add(classB, "Test");
Но это приводит к сбоям во время выполнения:
MyStruct structA = new MyStruct();
MyStruct structB = new MyStruct();
this.StructDictionary.Add(structA, "Test");
this.StructDictionary.Add(structB, "Test");
В нем говорится, что ключ уже существует, как и ожидалось, но только для структуры. Класс рассматривает его как две отдельные записи. Я думаю, что это имеет какое-то отношение к данным, которые хранятся в качестве эталона и ценности, но я хотел бы получить более подробное объяснение того, почему.