Respuestas:
Parse
arroja una excepción si no puede analizar el valor, mientras que TryParse
devuelve un que bool
indica si tuvo éxito.
TryParse
no solo try
/ catch
internamente, el punto es que se implementa sin excepciones para que sea rápido. De hecho, la forma más probable de implementarlo es que internamente el Parse
método llamará TryParse
y luego lanzará una excepción si regresa false
.
En pocas palabras, utilícelo Parse
si está seguro de que el valor será válido; de lo contrario utilizar TryParse
.
Si la cadena no se puede convertir a un número entero, entonces
int.Parse()
lanzará una excepciónint.TryParse()
devolverá falso (pero no lanzará una excepción)El método TryParse le permite probar si algo es analizable. Si prueba Parse como en la primera instancia con un int no válido, obtendrá una excepción mientras está en TryParse, devuelve un 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 generará una excepción.
TryParse y el impuesto de excepción
Parse lanza 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 se realizó correctamente (y no lanza una excepción).
Para que conste, estoy probando dos códigos: que simplemente intentan convertir de una cadena a un número y, si falla, asignan 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 la alternativa try & Catch lanzó 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 la excepción de Debug se establezca para detenerse con él.
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 debe 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 usarla como Salida para TryParse.
startDate
y endDate
como DateTime.TryParse
siempre los sobrescribirá con DateTime.MinValue
. Si las representaciones de fecha incorrectas deben convertirse a un valor diferente, verifique el valor de retorno de DateTime.TryParse
y si es falso, establezca el valor explícitamente.
DateTime?
( DateTime anulable )
double.Parse ("-"); genera una excepción, mientras que double.TryParse ("-", analizado); analiza a 0, así que supongo que TryParse hace conversiones más complejas.
TryParse
vuelve true
o false
? Así sabrá si era "válido".