詳細と言うオブジェクトを作成しました。次に割り当てます: int x = details.GetHashCode();
プログラムの後半で、整数 x を使用してこのオブジェクトにアクセスしたいと思います。C#でこれを行う方法はありますか?
どうもありがとう
ポール
詳細と言うオブジェクトを作成しました。次に割り当てます: int x = details.GetHashCode();
プログラムの後半で、整数 x を使用してこのオブジェクトにアクセスしたいと思います。C#でこれを行う方法はありますか?
どうもありがとう
ポール
いいえ:
(たとえば) a を作成し、ハッシュ コードをキーとして使用することもできますが、そうしないDictionary<int, Details>
ことを強くお勧めします。
ハッシュコードの代わりにオブジェクトへの参照を保持したくない理由はありますか?
整数を保存し、ハッシュコードをもう一度確認してください。
C# では、ハッシュコードが一意であることが保証されていないことに注意してください。数百万のオブジェクトを扱っている場合、デフォルトの実装では非常に簡単に重複したハッシュに遭遇する可能性があります。
http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx
「GetHashCode メソッドの既定の実装では、異なるオブジェクトに対して一意の戻り値が保証されません。」
いいえ。
Hashcode は、オブジェクトのハッシュ関数の値を表します。
これから元のオブジェクトの参照を再作成することはできません。さらに重要なことに、オブジェクトがまだ存在するという保証はありません。
オブジェクト指向に反する方法があれば。詳細参照を消費コードに公開する必要があります。
はい、Dictionary<int,Details>
からのハッシュコードを使用してこのディクショナリにオブジェクトを作成して保存し、details.GetHashCode( )
後で を使用してディクショナリからオブジェクトを引き出すことができますx
。
しかし、それは私がやることをお勧めするものではありません! あなたが達成しようとしているのは何ですか?
public static Detail GetDetailsFromHash(this List<Detail> detailsList, int x) {
foreach (var details in detailslist) {
if (details.GetHashCode() == x) {
return details;
}
}
return null;
}
ただし、ハッシュコードが一意であるとは限りません
ハッシュコードは、直接消費されることを意図したものではありません。その主な目的は、アイテムをコレクションのキーとして使用できるようにすることです。次に、ハッシュをオブジェクトにマップするのはコレクションの責任です。基本的にDictonary<details, myClass2>
、GetHashCode が実装されていない場合ははるかに難しいようなことを行うことができます...しかし、独自のコレクションまたは等価演算子を実装しない限り、関数はあまり使用されません。