0

オブジェクトの安定した (= 時間とともに変化しない) ハッシュコードを作成する必要があります。具体的には、オブジェクトの正確なタイプがわかりません。私が行う唯一の仮定は、それが IStructuralEquatable から継承されているということです。

だから私は方法が必要です:

static string GetStableHashcode <T> (T object) where T: IStructuralEquatable

.Net フレームワークはこのタイプの機能を提供しますか? それ以外の場合、どのアルゴリズムを使用しますか?

4

2 に答える 2

0

関数でジェネリックを使用する必要はないので、質問はメソッドを実装する方法です

static string GetStableHashcode(IStructuralEquatable obj) { ... }

そして、唯一の賢明な解決策は、次のように実装することです。

static string GetStableHashcode(IStructuralEquatable obj) {
  return obj.GetHashCode().ToString();
}

あなたの懸念は、安定した値を提供しないことであり、ドキュメントの注意Object.GetHashCode()という最初のボックスに見られるように、懸念は非常に有効です。

  • ハッシュ コード値をシリアル化したり、データベースに格納したりしないでください。

  • [...]

  • アプリケーション ドメインまたはプロセス間でハッシュ コードを送信しないでください。場合によっては、プロセスごとまたはアプリケーション ドメインごとにハッシュ コードを計算できます。

実際、 で作成されたハッシュ コードの中には、 と のようにObject.GetHashCode安定しているものもあり、 で使用されるアルゴリズムもハッシュ コードを「安定した方法」で結合します。ただし、これは実装の詳細であり、コードでこれに依存したい場合を除き、安定したハッシュ コードを作成して を実装するオブジェクトを提供することはできません。Int32.GetHashCodeString.GetHashCodeTuple.GetHashCodeIStructuralEquatable

于 2014-04-24T10:11:46.103 に答える