Pregunta

¿Cuál es la diferencia entre Parse () y TryParse ()?

int number = int.Parse(textBoxNumber.Text);

// The Try-Parse Method
int.TryParse(textBoxNumber.Text, out number);

¿Hay alguna forma de verificación de errores como un bloque Try-Catch?

¿Fue útil?

Solución

Parse lanza una excepción si no puede analizar el valor, mientras que TryParse devuelve un bool que indica si tuvo éxito.

TryParse no solo try / catch internamente, el objetivo es que se implementa sin excepciones para que sea rápido . De hecho, la forma en que probablemente se implementa es que internamente el método Parse llamará a TryParse y luego lanzará una excepción si devuelve false .

En pocas palabras, use Parse si está seguro de que el valor será válido; de lo contrario, use TryParse .

Otros consejos

Si la cadena no se puede convertir a un entero, entonces

  • int.Parse () lanzará una excepción
  • int. TryParse () devolverá falso (pero no arrojará una excepción)

El método TryParse le permite probar si algo es analizable. Si prueba Parse como en primera instancia con un int no válido, obtendrá una excepción mientras que en TryParse, devuelve un valor booleano que le permite saber si el análisis tuvo éxito o no.

Como nota al pie, pasar nulo a la mayoría de los métodos TryParse arrojará una excepción.

TryParse y el impuesto de excepción

Parse arroja una excepción si falla la conversión de una cadena al tipo de datos especificado, mientras que TryParse evita explícitamente lanzar una excepción.

TryParse no devuelve el valor, devuelve un código de estado para indicar si el análisis tuvo éxito (y no arroja una excepción).

Para el registro, estoy probando dos códigos: que simplemente intentan convertir de una cadena a un número y, si falla, asignar el número a cero.

        if (!Int32.TryParse(txt,out tmpint)) {
            tmpint = 0;
        }

y:

        try {
            tmpint = Convert.ToInt32(txt);
        } catch (Exception) {
            tmpint = 0;
        }

Para c #, la mejor opción es usar tryparse porque try & amp; Catch alternativa arrojó la excepción

A first chance exception of type 'System.FormatException' occurred in mscorlib.dll

Que es doloroso, lento e indeseable, sin embargo, el código no se detiene a menos que se resuelva la excepción de Debug para detenerlo.

Sé que es una publicación muy antigua, pero pensé en compartir algunos detalles más sobre Parse vs TryParse.

Tuve un escenario en el que DateTime necesita convertirse a String y si datevalue null o string.empty nos enfrentamos a una excepción. Para superar esto, hemos reemplazado Parse con TryParse y obtendremos la fecha predeterminada.

Código antiguo:

dTest[i].StartDate = DateTime.Parse(StartDate).ToString("MM/dd/yyyy");
dTest[i].EndDate = DateTime.Parse(EndDate).ToString("MM/dd/yyyy");

Nuevo código:

DateTime startDate = default(DateTime);
DateTime endDate=default(DateTime);
DateTime.TryParse(dPolicyPaidHistories[i].StartDate, out startDate);
DateTime.TryParse(dPolicyPaidHistories[i].EndDate, out endDate);

Tiene que declarar otra variable y usar como Out para TryParse.

double.Parse (" - "); plantea una excepción, mientras double. TryParse (" - " ;, analizado por fuera); analiza a 0 así que supongo que TryParse realiza conversiones más complejas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top