string.GetHashCode () возвращает разные значения при отладке и выпуске, как мне этого избежать?

К моему удивлению, следующий метод дает другой результат при отладке и выпуске:

int result = "test".GetHashCode();

Есть ли способ избежать этого?

Мне нужен надежный способ хеширования строки, и мне нужно, чтобы значение было согласованным в режиме отладки и выпуска. По возможности я бы хотел избежать написания собственной хеш-функции.

Почему это происходит?

К вашему сведению, рефлектор дает мне:

[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));
    }
}
6
задан Joe 23 September 2011 в 19:59
поделиться