反编译C#时的“ PrivateImplementationDetails”函数

Man*_*l23 5 c# decompiling reverse-engineering

我正在重建使用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;
 }
Run Code Online (Sandbox Code Playgroud)

Joh*_*ica 9

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

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

switch (sss)
{
    case "ASD":
    // do something
    break;
    case "JKL":
    // do something
    break
}
Run Code Online (Sandbox Code Playgroud)

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