2011-09-07 18 views
5

Hoy mientras juega con un De-compilador, i decompilados .NET C# Char Clase y hay un caso extraño, que yo no entiendoDeclaración de devolución múltiple ¿EXTRAÑO?

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 ! 
} 

he usado Telerik JustDecompile

+4

No, no es alcanzable. Tal vez alguien compiló sin optimizaciones para que el IL esté allí, y el decompilador lo agarra palabra por palabra. –

+0

¿De qué versión de .NET framework es esto y qué descompilador usó? –

+0

@ Adam Huldsworth tal vez deberías escribir ese Comentario como una respuesta para luego poder marcarlo como correcto. – Burimi

Respuesta

3

piensa que su decompilador podría ser poco fiables ... con reflector consigo:

public static bool IsDigit(char c) 
{ 
    if (!IsLatin1(c)) 
    { 
     return (CharUnicodeInfo.GetUnicodeCategory(c) == UnicodeCategory.DecimalDigitNumber); 
    } 
    return ((c >= '0') && (c <= '9')); 
} 

Y con ILSpy me sale:

public static bool IsDigit(char c) 
{ 
    if (char.IsLatin1(c)) 
    { 
     return c >= '0' && c <= '9'; 
    } 
    return CharUnicodeInfo.GetUnicodeCategory(c) == UnicodeCategory.DecimalDigitNumber; 
} 
+0

maldito Reflector está produciendo la Negación de ILSpy LOL! – Burimi

+0

Im Marcando esta respuesta como correcta, pero todas las respuestas son correctas, pero la tuya tiene Salida de 2 compiladores así que voy a marcar como Correcta. – Burimi

+0

Siempre estoy a favor de la cantidad sobre la calidad. 8oP – MrKWatkins

1

Parece como el descompilador que usaste no es muy bueno en lo que está haciendo.

Aquí está la salida de dotPeek para ese método:

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; 
} 
+0

im Usando Teleric Just-Decompiler – Burimi

+3

Ahora ya sabes: No lo vuelvas a usar ;-) –

+0

dotPeek no siempre da las soluciones correctas, pero cuando un descompilador da resultados que obviamente son incorrectos, siempre es una buena idea verifique con un decompilador diferente (o eche un vistazo a la IL). – dtb

1

Creo que su decompilador reside.

código 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; 
    } 
2

Asumo que esto es un error en el decompilador que usaste

En el marco .NET 4.0, IL Spy muestra el siguiente código:

public static bool IsDigit(char c) 
{ 
    if (char.IsLatin1(c)) 
    { 
     return c >= '0' && c <= '9'; 
    } 
    return CharUnicodeInfo.GetUnicodeCategory(c) 
      == UnicodeCategory.DecimalDigitNumber; 
} 
+0

Así que encontramos que Reflector e IlSpy son los mejores :-) – xanatos

+0

Me gusta un poco más la salida de ILSpy, parece más limpia, aunque técnicamente es la misma. –

+0

Yo también, porque él verifica un resultado positivo en lugar de uno negativo. – xanatos

Cuestiones relacionadas