C#のオブジェクトには、{Equals
、GetType
、ToString
、GetHashCode
}という4つのメソッドがあります。
誰かがハッシュコードを使ってどのような便利なことをすることができますか?.NETオブジェクトのハッシュコードはどうすればよいですか?
答えて
誰かがハッシュコードを使ってどのようなことを行うことができますか?
と等しいオブジェクトをすぐに見つけてください。
特に、このメソッドは、Dictionary<TKey, TValue>
(キー用)とHashSet<T>
などのタイプで通常使用されます。
あなたはでなければなりません。は、同じハッシュコードを持つオブジェクトが等しいと仮定します。詳細についてはEric Lippert's blog post、ハッシュコードの使用についてのより一般的な説明はWikipedia hash tableページを参照してください。
ハッシュコードは、等価性テスト中にオブジェクト を識別するために使用される数値です。コレクション内のオブジェクト のインデックスとしても機能します。
GetHashCodeメソッドは、ハッシュアルゴリズムや、ハッシュテーブルなどのデータ構造体 での使用に適しています。
GetHashCodeメソッドのデフォルト実装では、 は異なるオブジェクトの一意の戻り値を保証しません。さらに、 .NET Frameworkは、 GetHashCodeメソッドの既定の実装を保証しません。返される値は、 異なる.NET Frameworkのバージョン間で同じになります。したがって、このメソッドのデフォルトの の実装は、ハッシュの目的で固有のオブジェクト の識別子として使用してはなりません。
GetHashCodeメソッドは、派生型によってオーバーライドできます。値 は、この型に適切な のハッシュ関数を提供し、 ハッシュテーブルで有用な分布を提供するために、このメソッドをオーバーライドする必要があります。一意性のために、ハッシュコードは、静的フィールドまたは プロパティではなく、インスタンスフィールドまたはプロパティの値 に基づいている必要があります。
Hashtableオブジェクトのキーとして使用されるオブジェクトは、コードを生成する必要があるため、 GetHashCodeメソッドもオーバーライドする必要があります。キーとして使用されるオブジェクトが有用な のGetHashCodeの実装を提供しない場合、Hashtableオブジェクトの構築時に、 というハッシュコードプロバイダを指定できます。 .NET Framework バージョン2.0より前のバージョンでは、ハッシュコードプロバイダは System.Collections.IHashCodeProviderインターフェイスに基づいていました。 バージョン2.0以降、ハッシュコードプロバイダは System.Collections.IEqualityComparerインターフェイスに基づいています。
基本的な考え方は、2つのオブジェクトが異なるハッシュコードを持っている場合は、それらが異なるということです。それらが同じハッシュコードを持っていれば、それらは異なっていても同等であってもよい。
オブジェクトがコレクション内に存在するかどうかを確認するには、最初にハッシュコードをチェックします。これは、整数を比較してから、同じハッシュコードを持つオブジェクトに対してのみ、より正確なテストを行います。
たとえば、これはコレクションクラスで使用されます。
GetHashCodeメソッド
GetHashCode
のみこれらの2つのタイプ
の利益のために存在する - >ハッシュテーブル
- >GenericDictionary
GetHashCodeメソッドは、あなたに良いhashtable
パフォーマンスのための多様なキーを与えます。
は
は型がコンパイル時に不明であるnull-safe
等価比較を提供等しい等しいです。 の署名は
public static bool Equals(object A,object B)
です。
タイプは、コンパイルtime.Youでは不明であるのであれば、あなたが==
または!=
のような演算子を使用傾ける例えば、一般的なタイプに
を書くときに、その便利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
を返します.hi sの方法は、すべてのタイプの
を建てメソッドGetType
によってGetType
を無効にされruntime.Itで評価されるタイプのname
、assemby
、base type
..and他人
- 1. ASTのハッシュコードをキャッシュするにはどうすればよいですか?
- 2. IronPythonで.NET APIオブジェクトのオーバーライドされたプロパティにアクセスするにはどうすればよいですか?
- 3. JObjectの一意のハッシュコードを作成するにはどうすればよいですか?
- 4. 列挙体のハッシュコードをボックス化せずに取得するにはどうすればよいですか?
- 5. javaでhash sha256を使用してハッシュコードを生成するにはどうすればよいですか?
- 6. .NETでリアルタイムピッチ検出を行うにはどうすればよいですか?
- 7. IDictionaryの値を.Net 2.0のIListオブジェクトにコピーするにはどうすればよいですか?
- 8. .NETのリフレクションキャッシュをクリアするにはどうすればよいですか?
- 9. .NETアプリケーションからWinFax Pro COMオブジェクトを使用するにはどうすればよいですか?
- 10. .NETでradiobuttonlistを列挙するにはどうすればよいですか?
- 11. .NETでNegotiateを処理するにはどうすればよいですか?
- 12. ウェブブラウザコントロールでクリックイベントをシミュレートするにはどうすればよいですか? .NET
- 13. .NETでOutOfMemoryExceptionを取得するにはどうすればよいですか?
- 14. .NETでダイアグラムアプリケーションを作成するにはどうすればよいですか?
- 15. .NETでスキャナを使用するにはどうすればよいですか?
- 16. .NETアプリケーションでHTML5をホストするにはどうすればよいですか?
- 17. Ruby/RailsでNet :: IMAPオブジェクトをキャッシュ/シリアル化するにはどうすればよいですか?
- 18. コンパイル済み.NETアセンブリでMatlabオブジェクトを使用するにはどうすればよいですか?
- 19. このJSONオブジェクトは、どのように記述すればよいですか?
- 20. 各オブジェクトに属性の.NET反映を関連付けるにはどうすればよいですか?
- 21. .NET Frameworkをアンインストールするにはどうすればよいですか?
- 22. .Net CodeDomを使用して依存オブジェクトを作成するにはどうすればよいですか?
- 23. 文字列のユニークなハッシュコードを生成するにはどうすればいいですか?
- 24. .NETでComboBoxを編集できないようにするにはどうすればよいですか?
- 25. .NETプロジェクトの.Net Coreプロジェクトからソースファイルを追加するにはどうすればよいですか?
- 26. 1つのアプリケーションで.NET 2.0と.NET 4.0をサポートするにはどうすればよいですか?
- 27. .NET Coreと.NET Frameworkの両方でGetManifestResourceStreamを使用するにはどうすればよいですか?
- 28. .NET CoreのIdentityServer4を.NET 4.6で使用するにはどうすればよいですか?
- 29. RadListViewItemEventArgsからオブジェクトをunboxするにはどうすればよいですか?
- 30. オブジェクトからキーをフィルタリングするにはどうすればよいですか?
キーを知るために私たちを助け? equalsメソッドでキーが違うとは考えられないのですか? (IEquatable)? –
@RoyiNamir:はい、しかし、最初は*ハッシュコードと比較されています。これにより安価に*可能性のあるマッチを得ることができるからです。それ以外の場合は、辞書からフェッチするたびにすべてのキーと等しいかどうかを確認する必要があります。 –
equalsが仮定を破棄できる場合、コンパイラは潜在的なマッチングを行うのがなぜ迷惑でしょうか? (私はoverriding getHashCodeをオーバーライドする必要があることを知っています) - しかし、別の質問です。 –