Antworten:
Parse
Löst eine Ausnahme aus, wenn der Wert nicht analysiert werden kann, während eine TryParse
Rückgabe zurückgegeben wird, die bool
angibt, ob dies erfolgreich war.
TryParse
nicht nur try
/ catch
intern - der springende Punkt ist, dass es ohne Ausnahmen implementiert wird, so dass es schnell ist. Tatsächlich wird es höchstwahrscheinlich so implementiert, dass die Parse
Methode intern TryParse
eine Ausnahme aufruft und dann auslöst, wenn sie zurückkehrt false
.
Kurz gesagt, verwenden Parse
Sie diese Option, wenn Sie sicher sind, dass der Wert gültig ist. andernfalls verwenden TryParse
.
Wenn die Zeichenfolge nicht in eine Ganzzahl konvertiert werden kann, dann
int.Parse()
wird eine Ausnahme auslösenint.TryParse()
wird false zurückgeben (aber keine Ausnahme auslösen)Mit der TryParse-Methode können Sie testen, ob etwas analysierbar ist. Wenn Sie Parse wie in der ersten Instanz mit einem ungültigen int versuchen, wird eine Ausnahme angezeigt, während in TryParse ein Boolescher Wert zurückgegeben wird, der Sie darüber informiert, ob die Analyse erfolgreich war oder nicht.
Als Fußnote löst die Übergabe von null an die meisten TryParse-Methoden eine Ausnahme aus.
TryParse und die Ausnahmesteuer
Parse löst eine Ausnahme aus, wenn die Konvertierung von einer Zeichenfolge in den angegebenen Datentyp fehlschlägt, während TryParse das Auslösen einer Ausnahme explizit vermeidet.
TryParse gibt den Wert nicht zurück, sondern gibt einen Statuscode zurück, der angibt, ob die Analyse erfolgreich war (und keine Ausnahme auslöst).
Für die Aufzeichnung teste ich zwei Codes: Diese versuchen einfach, von einer Zeichenfolge in eine Zahl umzuwandeln, und wenn dies fehlschlägt, weisen Sie die Zahl Null zu.
if (!Int32.TryParse(txt,out tmpint)) {
tmpint = 0;
}
und:
try {
tmpint = Convert.ToInt32(txt);
} catch (Exception) {
tmpint = 0;
}
Für c # ist die beste Option die Verwendung von tryparse, da die Alternative try & Catch die Ausnahme ausgelöst hat
A first chance exception of type 'System.FormatException' occurred in mscorlib.dll
Dass es schmerzhaft langsam und unerwünscht ist, hört der Code jedoch nicht auf, es sei denn, die Debug-Ausnahme ist damit verbunden, damit aufzuhören.
Ich weiß, dass es ein sehr alter Beitrag ist, dachte aber daran, ein paar weitere Details zu Parse vs TryParse zu teilen.
Ich hatte ein Szenario, in dem DateTime in String konvertiert werden muss und wenn datevalue null oder string.empty ist, hatten wir eine Ausnahme. Um dies zu überwinden, haben wir Parse durch TryParse ersetzt und erhalten das Standarddatum.
Alter Code:
dTest[i].StartDate = DateTime.Parse(StartDate).ToString("MM/dd/yyyy");
dTest[i].EndDate = DateTime.Parse(EndDate).ToString("MM/dd/yyyy");
Neuer Code:
DateTime startDate = default(DateTime);
DateTime endDate=default(DateTime);
DateTime.TryParse(dPolicyPaidHistories[i].StartDate, out startDate);
DateTime.TryParse(dPolicyPaidHistories[i].EndDate, out endDate);
Müssen eine andere Variable deklarieren und als Out für TryParse verwendet werden.
startDate
und überschreiben sie endDate
wie DateTime.TryParse
immer mit DateTime.MinValue
. Wenn falsche Datumsdarstellungen in einen anderen Wert konvertiert werden sollen, überprüfen Sie den Rückgabewert von DateTime.TryParse
und setzen Sie den Wert explizit, wenn er falsch ist.
DateTime?
( DateTime nullable )
double.Parse ("-"); löst eine Ausnahme aus, während double.TryParse ("-", out parsed); wird auf 0 analysiert, also führt TryParse vermutlich komplexere Konvertierungen durch.
TryParse
zurück true
oder false
? So wissen Sie, ob es "gültig" war.