"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 对此进行了测试,可以确认它正确显示了这一点。
我正在重建一个用 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 对此进行了测试,可以确认它正确显示了这一点。