今天在玩De-compiler时,我对.NET C#Char类进行了反编译,并且有一个我不理解的奇怪案例
public static bool IsDigit(char c)
{
if (char.IsLatin1(c) || c >= 48)
{
return c <= 57;
}
return false;
return CharUnicodeInfo.GetUnicodeCategory(c) == 8;//Is this Line Reachable if Yes How does it work !
}
我使用 Telerik JustDecompile
答案 0 :(得分:3)
认为您的反编译器可能很狡猾......使用Reflector我得到:
public static bool IsDigit(char c)
{
if (!IsLatin1(c))
{
return (CharUnicodeInfo.GetUnicodeCategory(c) == UnicodeCategory.DecimalDigitNumber);
}
return ((c >= '0') && (c <= '9'));
}
使用ILSpy,我得到:
public static bool IsDigit(char c)
{
if (char.IsLatin1(c))
{
return c >= '0' && c <= '9';
}
return CharUnicodeInfo.GetUnicodeCategory(c) == UnicodeCategory.DecimalDigitNumber;
}
答案 1 :(得分:2)
我认为这是您使用的反编译器中的错误。
在.NET 4.0框架中,IL Spy显示以下代码:
public static bool IsDigit(char c)
{
if (char.IsLatin1(c))
{
return c >= '0' && c <= '9';
}
return CharUnicodeInfo.GetUnicodeCategory(c)
== UnicodeCategory.DecimalDigitNumber;
}
答案 2 :(得分:1)
看起来你使用的反编译器并不是很擅长它正在做的事情。
以下是该方法的dotPeek输出:
public static bool IsDigit(char c)
{
if (!char.IsLatin1(c))
return CharUnicodeInfo.GetUnicodeCategory(c) == UnicodeCategory.DecimalDigitNumber;
if ((int) c >= 48)
return (int) c <= 57;
else
return false;
}
答案 3 :(得分:1)
我认为你的反编译器是谎言。
dotPeek代码:
public static bool IsDigit(char c)
{
if (char.IsLatin1(c))
{
if ((int) c >= 48)
return (int) c <= 57;
else
return false;
}
else
return CharUnicodeInfo.GetUnicodeCategory(c) == UnicodeCategory.DecimalDigitNumber;
}