"PrivateImplementationDetails"反编译C#时的函数

"PrivateImplementationDetails" function when decompiling a C #

我正在重建一个用 C# 编程的库,需要有关 Switch 语句的帮助,我有以下使用编译期间生成的 <PrivateImplementationDetails> .ComputeStringHash () 函数的代码片段。我的问题是,我应该使用什么功能?使用 sss.GetHashCode() 会得到相同的结果吗?

目前向我显示的错误是 Can not resolve symbol 'PrivateImplementationDetails'

 switch (<PrivateImplementationDetails>.ComputeStringHash(sss)) {
    case 0x1315fc:
        if (sss == "ASD") {
            break;
        }
        goto Label_0105;

    case 0x15c3dc:
        if (sss == "JKL") {
            break;
        }
        goto Label_0105;
 }

下面这段代码是 运行 您的代码的正确代码,没有任何错误:

internal sealed class PrivateImplementationDetails
{
    internal static uint ComputeStringHash(string s)
    {
        uint num = new uint();
        if (s != null)
        {
            num = 0x811c9dc5;
            for (int i = 0; i < s.Length; i++)
            {
                num = (s[i] ^ num) * 0x1000193;
            }
        }
        return num;
    }
}

并删除 PrivateImplementationDetails

周围的 <>

在提出问题时,生成的 IL 相对较新,因此反编译器尚未更新以支持它。本质上,反编译器揭示了一些底层 .NET 框架代码和用于支持字符串 switch 语句的 hash function

现在,大约一年后,反编译器已经更新,因此它们应该只显示如下 switch 语句:

switch (sss)
{
    case "ASD":
    // do something
    break;
    case "JKL":
    // do something
    break
}

我已经用 DotPeek 对此进行了测试,可以确认它正确显示了这一点。