Respuestas:
Parsearroja una excepción si no puede analizar el valor, mientras que TryParsedevuelve un que boolindica si tuvo éxito.
TryParseno solo try/ catchinternamente, 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 Parsemétodo llamará TryParsey luego lanzará una excepción si regresa false.
En pocas palabras, utilícelo Parsesi 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.
startDatey endDatecomo DateTime.TryParsesiempre los sobrescribirá con DateTime.MinValue. Si las representaciones de fecha incorrectas deben convertirse a un valor diferente, verifique el valor de retorno de DateTime.TryParsey 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.
TryParsevuelve trueo false? Así sabrá si era "válido".