Boolean型:
public override int GetHashCode()
{
return !this ? 0 : 1;
}Byte型:
public override int GetHashCode()
{
return (int) this;
}SByte型:
public override int GetHashCode()
{
return (int) this ^ (int) (this >> 32);
}Char型:
public override int GetHashCode()
{
return (int) this | (int) this << 16;
}Double型:
public override unsafe int GetHashCode()
{
double num1 = this;
if (num1 == 0.0)
return 0;
long num2 = *(long*) &num1;
return (int) num2 ^ (int) (num2 >> 32);
}Int16型:
public override int GetHashCode()
{
return (int) (ushort) this | (int) this << 16;
}Int32型:
public override int GetHashCode()
{
return this;
}Int64型:
public override int GetHashCode()
{
return (int) this ^ (int) (this >> 32);
}String型:
public override unsafe int GetHashCode()
{
if (HashHelpers.s_UseRandomizedStringHashing)
return string.InternalMarvin32HashString(this, this.Length, 0L);
fixed (char* chPtr = this)
{
int num1 = 352654597;
int num2 = num1;
int* numPtr = (int*) chPtr;
int length = this.Length;
while (length > 2)
{
num1 = (num1 << 5) + num1 + (num1 >> 27) ^ *numPtr;
num2 = (num2 << 5) + num2 + (num2 >> 27) ^ numPtr[1];
numPtr += 2;
length -= 4;
}
if (length > 0)
num1 = (num1 << 5) + num1 + (num1 >> 27) ^ *numPtr;
return num1 + num2 * 1566083941;
}
}
本文详细介绍了C#中各种基本数据类型如Boolean、Byte、SByte等的GetHashCode方法的具体实现方式,通过这些方法可以了解不同类型如何计算其哈希值。
1477

被折叠的 条评论
为什么被折叠?



