ComputeStringHash错误解决办法

用 ILSPY 或者 .NET Reflector 、dnspy 等反编译出来之后 文件由于语法不符合已经被丢弃了,

所以在反编译工具里面找到这个类,手动复制出来,新建一个类,把尖括号等去掉,方法就只保留 ComputeStringHash 方法就行了。

再在报错的地方也把尖括号去掉。

这个方法原本是一个string类型的switch,switch本身就要计算hash来判断,但是反编译工具对这个的解析出了问题,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[CompilerGenerated]
internal sealed class PrivateImplementationDetails
{
    internal static uint ComputeStringHash(string s)
    {
        uint num = 0;
        if(s != null)
        {
            num = 2166136261U;
            for(int i=0;i<s.Length;i++)
            {
                num = ((uint)s[i] ^ num)*16777619U;
            }
        }
        return num;
    }
}

重建类后测试 ComputeStringHash(“link”)最后的结果就是 232457833 ,

如果判断条件不多的话其实可以直接把这个数字判断全部删掉,重写switch或者if都可以。如果判断条件很多懒得弄就自建PrivateImplementationDetails是最简单的