辞書のキーを参照型に設定しても大丈夫ですか?ディクショナリはそれらのオブジェクトの参照を保存しますか、それともオブジェクトインスタンスを保存しますか?私は辞書を持っていて、リストがブール値としてロードされているかどうかを保存しています。実際に大量のリストを保存すると、面倒になります。
public Dictionary<object, bool> isloaded;
辞書のキーを参照型に設定しても大丈夫ですか?ディクショナリはそれらのオブジェクトの参照を保存しますか、それともオブジェクトインスタンスを保存しますか?私は辞書を持っていて、リストがブール値としてロードされているかどうかを保存しています。実際に大量のリストを保存すると、面倒になります。
public Dictionary<object, bool> isloaded;
それは完全に大丈夫です-それは参照だけを保存し、コピーは保存しません。
ただし、キーオブジェクトを挿入した後は、キーのGetHashCode()の計算に使用されるキーオブジェクトのフィールドを変更しないように注意する必要があります。
これは、オブジェクトのGetHashCode()が、キーとして内部的に使用される整数キーを生成するために使用されるためです。明らかに、キーが挿入された後にそれが変更された場合、それは間違った場所にあり、悪いことが起こります。
(個人的には、キーには不変オブジェクトのみを使用する必要があると思います。)
はい、「大丈夫」です。
辞書には参照が格納されます。インスタンスはコピーされません。
キーオブジェクトが可変であり、ハッシュコードが変更されるように変更される場合、これは問題になる可能性があることに注意してください。また、キーとして使用される参照タイプが何であれ、それらのGetHashCode()
メソッドには意味のある実装が必要であることに注意してください。