GetHashCode()
將返回int
而不是Decimal
。
Math.Abs(int)
只會當通過int
等於int.MinValue
,所以你可以測試該條件明確地失敗:
int myValue = sdmpobject.SnapshotHandle.GetHashCode();
int absValue = myValue == int.MinValue ? int.MaxValue : Math.Abs(myValue);
int bucket = absValue % numPartitions;
這假設是可以接受的,你要通過一個針對罕見的情況被關閉。由於您的結果是在一個名爲「桶」的變量,也許你想糾正該關閉的情況的一個是這樣的:
int myValue = sdmpobject.SnapshotHandle.GetHashCode();
int bucket;
if (myValue == int.MinValue)
{
bucket = ((int.MaxValue % numPartitions) + 1) % numPartitions;
}
else
{
int bucket = Math.Abs(myValue) % numPartitions;
}
你不能只是「翻牌」的所有值的原因,有簽名的數據類型通常可以保存比正數更多的負數,因此它們不能表示它們可以容納的最負數的絕對值。
GetHasCode返回一個int btw。 – ken2k 2013-04-09 12:20:29
我猜他的意思是'MinValue'' -2,147,483,648',因此它的絕對不能表示爲int – V4Vendetta 2013-04-09 12:37:54