2

得られる値は、long.GetHashCode()さまざまな .NET Framework バージョン、OS バージョン、プロセッサ アーキテクチャなどで確実に同じになるでしょうか?

この質問は、異なるサーバーでの異なる結果に言及している他の質問に基づいています。

// Will I be the same everywhere?
var hash = 2170881568869167279.GetHashCode();

おまけint: andも同じuintですか?

4

1 に答える 1

5

の契約によりGetHashCode、2 つの異なるプロセスで同じマシン上で同じである必要さえありません。

このメソッドのデフォルトの実装は、ハッシュ目的で一意のオブジェクト識別子として使用しないでください。

特定のタイプについては、異なるマシンでも常に同じハッシュ コードを返すように実装できます (おそらく実装されています)。ただし、これは依存 すべきではない実装の詳細です。予告なしに変更される可能性があります。

さらに、2 つの異なるオブジェクトが合法的に同じハッシュ コードを持つことができます。の例では、 からまでのすべての値のハッシュコードを作成するlongと、平均して各ハッシュコードが発生します。long.MaxValue / int.MaxValuelong.MinValuelong.Maxvalue

結論:
いいえ、オブジェクトのインスタンスを識別する信頼できる方法ではありません。

数値を扱う場合は、単純に数値自体を使用するか、実際のハッシュ アルゴリズムを使用できます。

于 2013-01-11T11:49:22.030 に答える