C# Language
Behandlung von FormatException beim Konvertieren von Zeichenfolgen in andere Typen
Suche…
String in Ganzzahl konvertieren
Es gibt verschiedene Methoden, um eine string
explizit in eine integer
konvertieren, z.
Convert.ToInt16();
Convert.ToInt32();
Convert.ToInt64();
int.Parse();
Alle diese Methoden FormatException
eine FormatException
, wenn die Eingabezeichenfolge nicht numerische Zeichen enthält. Dafür müssen wir eine zusätzliche Ausnahmebehandlung ( try..catch
) schreiben, um sie in solchen Fällen zu behandeln.
Erklärung mit Beispielen:
Also sei unsere Eingabe:
string inputString = "10.2";
Beispiel 1: Convert.ToInt32()
int convertedInt = Convert.ToInt32(inputString); // Failed to Convert
// Throws an Exception "Input string was not in a correct format."
Hinweis: Gleiches gilt für die anderen genannten Methoden, nämlich - Convert.ToInt16();
und Convert.ToInt64();
Beispiel 2: int.Parse()
int convertedInt = int.Parse(inputString); // Same result "Input string was not in a correct format.
Wie umgehen wir das?
Wie bereits gesagt, benötigen wir für die Behandlung der Ausnahmen normalerweise einen try..catch
wie unten gezeigt:
try
{
string inputString = "10.2";
int convertedInt = int.Parse(inputString);
}
catch (Exception Ex)
{
//Display some message, that the conversion has failed.
}
Aber die Verwendung von try..catch
wird nicht überall eine gute Praxis, und es können einige Szenarien, in denen wir wollten geben 0
, wenn der Eingang nicht stimmt, (Wenn wir das obige Verfahren folgen müssen wir zuweisen 0
bis convertedInt
aus der Fangblock). Um solche Szenarien zu handhaben, können wir eine spezielle Methode namens .TryParse()
.
Die .TryParse()
-Methode verfügt über eine interne Ausnahmebehandlung, die Ihnen die Ausgabe an den out
Parameter gibt und einen booleschen Wert zurückgibt, der den Konvertierungsstatus angibt ( true
wenn die Konvertierung erfolgreich war; false
wenn sie fehlgeschlagen ist) Anhand des Rückgabewerts können wir den Konvertierungsstatus ermitteln. Schauen wir uns ein Beispiel an:
Verwendung 1: Speichern Sie den Rückgabewert in einer booleschen Variablen
int convertedInt; // Be the required integer
bool isSuccessConversion = int.TryParse(inputString, out convertedInt);
Wir können die Variable isSuccessConversion
nach der Ausführung überprüfen, um den Konvertierungsstatus zu überprüfen. Wenn es falsch ist, ist der Wert von convertedInt
0
(keine Notwendigkeit, den Rückgabewert zu überprüfen, wenn 0
für einen Konvertierungsfehler gewünscht wird).
Verwendung 2: Überprüfen Sie den Rückgabewert mit if
if (int.TryParse(inputString, out convertedInt))
{
// convertedInt will have the converted value
// Proceed with that
}
else
{
// Display an error message
}
Verwendung 3: Ohne den Rückgabewert zu überprüfen, können Sie Folgendes verwenden, wenn Sie sich nicht für den Rückgabewert interessieren (konvertiert oder nicht, 0
ist in Ordnung)
int.TryParse(inputString, out convertedInt);
// use the value of convertedInt
// But it will be 0 if not converted