0

詳細と言うオブジェクトを作成しました。次に割り当てます: int x = details.GetHashCode();

プログラムの後半で、整数 x を使用してこのオブジェクトにアクセスしたいと思います。C#でこれを行う方法はありますか?

どうもありがとう

ポール

4

7 に答える 7

7

いいえ:

  • それを止める何かが整っていない限り、ガベージコレクションされた可能性があります。
  • ハッシュ コードは一意ではありません。同じハッシュ コードを持つオブジェクトが 2 つある場合はどうなるでしょうか。(詳細については、ハッシュ コードに関する Eric Lippert の投稿を参照してください。)

(たとえば) a を作成し、ハッシュ コードをキーとして使用することもできますが、そうしないDictionary<int, Details>ことを強くお勧めします。

ハッシュコードの代わりにオブジェクトへの参照を保持したくない理由はありますか?

于 2011-05-24T10:43:30.113 に答える
0

整数を保存し、ハッシュコードをもう一度確認してください。

C# では、ハッシュコードが一意であることが保証されていないことに注意してください。数百万のオブジェクトを扱っている場合、デフォルトの実装では非常に簡単に重複したハッシュに遭遇する可能性があります。

http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx

「GetHashCode メソッドの既定の実装では、異なるオブジェクトに対して一意の戻り値が保証されません。」

于 2011-05-24T10:46:57.040 に答える
0

いいえ。

Hashcode は、オブジェクトのハッシュ関数の値を表します。

これから元のオブジェクトの参照を再作成することはできません。さらに重要なことに、オブジェクトがまだ存在するという保証はありません。

于 2011-05-24T10:45:04.747 に答える
0

オブジェクト指向に反する方法があれば。詳細参照を消費コードに公開する必要があります。

于 2011-05-24T10:45:07.583 に答える
0

はい、Dictionary<int,Details>からのハッシュコードを使用してこのディクショナリにオブジェクトを作成して保存し、details.GetHashCode( )後で を使用してディクショナリからオブジェクトを引き出すことができますx

しかし、それは私がやることをお勧めするものではありません! あなたが達成しようとしているのは何ですか?

于 2011-05-24T10:45:17.603 に答える
0
public static Detail GetDetailsFromHash(this List<Detail> detailsList, int x) {
    foreach (var details in detailslist) {
        if (details.GetHashCode() == x) {
            return details;
        }
    }
    return null;
}

ただし、ハッシュコードが一意であるとは限りません

于 2011-05-24T10:48:44.997 に答える
0

ハッシュコードは、直接消費されることを意図したものではありません。その主な目的は、アイテムをコレクションのキーとして使用できるようにすることです。次に、ハッシュをオブジェクトにマップするのはコレクションの責任です。基本的にDictonary<details, myClass2>、GetHashCode が実装されていない場合ははるかに難しいようなことを行うことができます...しかし、独自のコレクションまたは等価演算子を実装しない限り、関数はあまり使用されません。

于 2011-05-24T10:51:48.233 に答える