string.GetHashCode () retorna valores diferentes em debug vs release, como evito iss
Para minha surpresa, o método a seguir produz um resultado diferente em debug vs release:
int result = "test".GetHashCode();
Existe alguma maneira de evitar isso?
Preciso de uma maneira confiável de fazer hash de uma string e preciso que o valor seja consistente no modo de depuração e liberação. Gostaria de evitar escrever minha própria função de hash, se possíve
Por que isso acontece
FYI, refletor me dá:
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail), SecuritySafeCritical]
public override unsafe int GetHashCode()
{
fixed (char* str = ((char*) this))
{
char* chPtr = str;
int num = 0x15051505;
int num2 = num;
int* numPtr = (int*) chPtr;
for (int i = this.Length; i > 0; i -= 4)
{
num = (((num << 5) + num) + (num >> 0x1b)) ^ numPtr[0];
if (i <= 2)
{
break;
}
num2 = (((num2 << 5) + num2) + (num2 >> 0x1b)) ^ numPtr[1];
numPtr += 2;
}
return (num + (num2 * 0x5d588b65));
}
}