2010-12-29 14 views
22

leí esto desde MSDN sobre Int32.TryParse()Int32.TryParse() devuelve cero en caso de error: ¿éxito o error?

Cuando devuelve este método contiene el 32-bit de valor entero de equivalente al número que figura en s, si la conversión tuvo éxito, o cero si la conversión ha fallado.

Pero, ¿qué sucede si la cadena pasada es en sí misma una representación de cadena de '0'. Entonces, el TryParse devolverá cero. ¿Cómo puedo saber si es un éxito o una falla?

Respuesta

48

No, TryParsedevuelve verdadero o falso para indicar el éxito. El valor del parámetro out se usa para el valor analizado, o 0 en caso de falla. Por lo tanto:

int value; 
if (Int32.TryParse(someText, out value)) 
{ 
    // Parse successful. value can be any integer 
} 
else 
{ 
    // Parse failed. value will be 0. 
} 

Así que si se pasa en "0", se ejecutará el primer bloque, mientras que si se pasa en "mal número" se ejecutará el segundo bloque.

+0

Gosh! Mi error. Debo cerrar SO mientras estoy programando. Es muy fácil publicarlo aquí :). – NLV

+0

Has omitido un ')' al final de tu if. – BoltClock

+0

@BoltClock: reparado, gracias. –

5

El método devuelve un valor booleano que indica éxito o error. Usa eso. El número entero es un parámetro de referencia que se pasa al método y no tiene nada que ver con el valor de retorno del método.

Aquí está el prototipo de Int32.TryParse() del documentation. Está muy claro que devuelve un valor booleano. El segundo parámetro es out int, lo que significa que el argumento se pasa por referencia, por lo que será mutado por el método.

public static bool TryParse(
    string s, 
    out int result 
) 

Así, para comprobar el éxito o el fracaso, hacer esto:

int value; 

if (Int32.TryParse("0", out value)) 
    Console.WriteLine("Parsed as " + value); 
else 
    Console.WriteLine("Could not parse"); 
2

TryParse() devuelve un valor booleano.

 Int32 testInt; 

     if (!Int32.TryParse("123", out testInt)) 
     { 
      MessageBox.Show("Is not a Int32!"); 
      return; // abbrechen 
     } 

     MessageBox.Show("The parst Int32-value is " + testInt); 
2

El método Int32.TryParse() devuelve un valor boolean como retorno y proporciona el valor convertido como un parámetro de salida. Entonces puede verificar el valor de retorno boolean para el estado.

private static void TryToParse(string value) 
    { 
     int number; 
     bool result = Int32.TryParse(value, out number); 
     if (result) 
     { 
     Console.WriteLine("Converted '{0}' to {1}.", value, number);   
     } 
     else 
     { 
     if (value == null) value = ""; 
     Console.WriteLine("Attempted conversion of '{0}' failed.", value); 
     } 
    } 
0

usando C# 7 ahora puede declarar la variable dentro del TryParse como ...

if (Int32.TryParse(someText, out int value)) 
{ 
    // Parse successful. value can be any integer 
} 
else 
{ 
    // Parse failed. value will be 0. 
} 
Cuestiones relacionadas