次のクラスと構造体の定義があり、それぞれをディクショナリ オブジェクトのキーとして使用したとします。
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");
予想どおり、キーは既に存在すると言われていますが、構造体に対してのみです。クラスはそれを 2 つの別個のエントリとして扱います。参考値として保持しているデータと関係があると思いますが、その理由をもう少し詳しく説明していただきたいです。