複雑な構造のオブジェクトにはプロパティDictionary<Object, Object> Annotations
があり、一部の処理フェーズで使用されるメタ データとカスタム データを格納できます。を作成し、static readonly object UniqueName = new object()
それを辞書のキーとして使用できるようになりました。static readonly object
それが一意であることを確実に知っているので、私は a を使用します。他の誰もまったく同じオブジェクト インスタンスを作成することはできません。代わりに文字列をキーとして使用した場合、他の誰かが誤って同じ文字列をキーとして使用する可能性があり、これが問題を引き起こす可能性があります。
ただし、いくつかの情報源 (ここを含む) から、デフォルトのGetHashCode
実装はメモリ内のオブジェクトの場所に基づいていることがわかりました。これは、オブジェクトがガベージ コレクターによって移動されると変更される可能性があり、これにより返されるハッシュが変更される可能性があります。その場合、ディクショナリはキー オブジェクトに関連付けられた値を見つけることができません。
フィールドを持たないオブジェクトが存続期間中にハッシュ コードを変更しないようにするにはどうすればよいですか?
単純な解決策は、常に を返すKey
オブジェクトを作成することです。ただし、これはディクショナリのパフォーマンスに深刻な影響を与えるため、解決策ではありません。GetHashCode
42