6

C# のオブジェクトには、{ EqualsGetTypeToStringGetHashCode} の 4 つのメソッドがあります。
誰かがハッシュコードを使ってどんな便利なことをすることができますか?

4

4 に答える 4

16

誰かがハッシュコードでどのような便利なことをすることができますか?

潜在的に等しいオブジェクトをすばやく見つけます。

特に、このメソッドは通常、Dictionary<TKey, TValue>(キーの)や。などのタイプで使用されますHashSet<T>

ただし、ハッシュコードが等しいオブジェクトが等しいと想定しないでください。詳細については、 Eric Lippertのブログ投稿を参照してください。ハッシュコードの使用に関するより一般的な説明については、 Wikipediaのハッシュテーブルページを参照してください。

于 2012-10-31T14:36:32.160 に答える
2

ハッシュコードは、同等性テスト中にオブジェクトを識別するために使用される数値です。コレクション内のオブジェクトのインデックスとしても機能します。

GetHashCodeメソッドは、ハッシュアルゴリズムやハッシュテーブルなどのデータ構造での使用に適しています。

GetHashCodeメソッドのデフォルトの実装は、さまざまなオブジェクトの一意の戻り値を保証するものではありません。さらに、.NET Frameworkは、GetHashCodeメソッドのデフォルトの実装を保証するものではなく、返される値は、.NETFrameworkの異なるバージョン間で同じになります。したがって、このメソッドのデフォルトの実装は、ハッシュの目的で一意のオブジェクト識別子として使用してはなりません。

GetHashCodeメソッドは、派生型によってオーバーライドできます。値型は、このメソッドをオーバーライドして、その型に適したハッシュ関数を提供し、ハッシュテーブルで有用な分布を提供する必要があります。一意性を保つために、ハッシュコードは、静的フィールドまたはプロパティではなく、インスタンスフィールドまたはプロパティの値に基づいている必要があります。

Hashtableオブジェクトでキーとして使用されるオブジェクトは、GetHashCodeメソッドもオーバーライドする必要があります。これは、これらのオブジェクトが独自のハッシュコードを生成する必要があるためです。キーとして使用されるオブジェクトがGetHashCodeの有用な実装を提供しない場合は、Hashtableオブジェクトの作成時にハッシュコードプロバイダーを指定できます。.NET Frameworkバージョン2.0より前は、ハッシュコードプロバイダーはSystem.Collections.IHashCodeProviderインターフェイスに基づいていました。バージョン2.0以降、ハッシュコードプロバイダーはSystem.Collections.IEqualityComparerインターフェイスに基づいています。

-MSDNから供給

于 2012-10-31T14:36:50.793 に答える
0

基本的な考え方は、2 つのオブジェクトのハッシュ コードが異なる場合、それらは異なるということです。それらが同じハッシュ コードを持っている場合、それらは異なるか等しい可能性があります。

オブジェクトがコレクションに存在するかどうかを確認するには、最初にハッシュ コードを確認できます。これは、整数を比較していることを考えると簡単です。次に、同じハッシュ コードを持つオブジェクトに対してのみ、より正確なテストを行います。

これは、たとえば、コレクション クラスで使用されます。

于 2012-10-31T14:39:21.320 に答える
0

GetHashCode

GetHashCodeこれら2つのタイプの利益のためだけに存在します

->ハッシュテーブル

-> GenericDictionary

GetHashCode は、hashtableパフォーマンスを向上させるためのさまざまなキーを提供します。

等しい

Equals は、null-safeコンパイル時に型が不明な場合に等値比較を提供します。その署名は

public static bool Equals(object A,object B).

そのため、コンパイル時に型が不明な場合==やなどの演算子を使用することはできません。使用する必要があります!=Equals

ジェネリック型を記述するときに役立ちます

例えば:

class Test<T>
{
    T value;
    public void SetV(T newValue)
   {
   if(object.Equals(newValue,value))
   //We have to use Object.Equals cant use == or !=since they cannot bind to unknown type at compile time
   }
}

ToString

型インスタンスのデフォルトを返します。このtexual representationメソッドは、すべての組み込み型によってオーバーライドされます。

GetType

GetTypeは実行時に評価されます。型のnameassembybase type.. などを知るのに役立ちます

于 2012-10-31T15:26:09.880 に答える