多回报声明STRANGE?

时间:2011-09-07 12:58:32

标签: c# return decompiling

今天在玩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

4 个答案:

答案 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;
    }