私は、他のオブジェクトから取得したハッシュコードは、x86またはx64用に構築したときとは異なることに気付きました。 今まで私はこのような自分自身のハッシュ関数のほとんどを実装している:私は、x86または64用にビルドするかどうかによって、オブジェクトから異なるハッシュコードを取得することに気付きました。
int someIntValueA;
int someIntValueB;
const int SHORT_MASK = 0xFFFF;
public override int GetHashCode()
{
return (someIntValueA & SHORT_MASK) + ((someIntValueB & SHORT_MASK) << 16);
}
が長いの値を格納し、それからハッシュコードは私の64ビットシステム上だけでなく、より広い範囲を与えてきます、またはこれは悪い考えですか?
public override int GetHashCode()
{
long maybeBiggerSpectrumPossible = someIntValueA + (someIntValueB << 32);
return maybeBiggerSpectrumPossible.GetHashCode();
}
あなたはまだ 'int'を返すので、より広い範囲を与えることはありません。 – Ryan
@Ryanそれは私が求めていることです:intはいつもそしていつまでもintですか?それとも、いくつかの状況下ではint64/longになりますか? – user3488765
これはあなたが尋ねた質問ではありません。その質問に対する答えは次のとおりです。C#intはInt32の同義語であり、ストーリーの終わりです。ポインタサイズの整数は 'IntPtr'であり、あなたはC#で数学を行うことを許可していません。 –