Übung: Untersuchen der TryParse()-Methode
- 12 Minuten
Wenn Sie mit Daten arbeiten, müssen Sie wahrscheinlich Zeichenfolgendaten in einen numerischen Datentyp konvertieren. Wie Sie in der vorherigen Lerneinheit gelernt haben, ist es möglich, dass die Durchführung einer Konvertierung von einer string in einen numerischen Datentyp einen Laufzeitfehler verursacht, da der Zeichenfolgendatentyp einen nicht-numerischen Wert enthalten kann.
Beispielsweise folgender Code:
string name = "Bob";
Console.WriteLine(int.Parse(name));
löst beispielsweise die folgende Ausnahme aus:
System.FormatException: 'Input string was not in a correct format.'
Um eine Formatausnahme zu vermeiden, verwenden Sie die TryParse()-Methode für den Zieldatentyp.
Verwenden von TryParse()
Die TryParse()-Methode führt mehrere Vorgänge gleichzeitig aus:
- Sie versucht, eine Zeichenfolge in den angegebenen numerischen Datentyp zu analysieren.
- Bei erfolgreicher Ausführung wird der konvertierte Wert in einem out-Parameter gespeichert, wie im folgenden Abschnitt erläutert.
- Ein
bool-Wert wird zurückgegeben, um anzugeben, ob die Aktion erfolgreich war oder ein Fehler aufgetreten ist.
Mithilfe des booleschen Werts können Sie Maßnahmen für den Wert ergreifen (etwa eine Berechnung durchführen) oder eine Meldung anzeigen, wenn der Parsevorgang nicht erfolgreich war.
Hinweis
In dieser Übung verwenden Sie den Datentyp int, aber eine ähnliche TryParse()-Methode ist für alle numerischen Datentypen verfügbar.
out-Parameter
Methoden können einen Wert oder „void“ zurückgeben, was bedeutet, dass sie keinen Wert zurückgeben. Methoden können auch Werte über out-Parameter zurückgeben, die genau wie ein Eingabeparameter definiert sind, aber das Schlüsselwort out enthalten.
TryParse() einer Zeichenfolge in einen Integerwert
Löschen oder verwenden Sie den Operator für Zeilenkommentare
//, um den gesamten Code aus den vorherigen Übungen auszukommentieren.Aktualisieren Sie Ihren Code im Visual Studio Code-Editor wie folgt:
string value = "102"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); }Untersuchen Sie die folgende Codezeile:
if (int.TryParse(value, out result))Beim Aufruf einer Methode mit einem
out-Parameter müssen Sie das Schlüsselwortoutvor der Variablen verwenden, die den Wert enthält. Derout-Parameter wird derresult-Variablen im Code(int.TryParse(value,out result)zugewiesen. Sie können dann den Wert nutzen, den derout-Parameter im restlichen Code enthält, indem Sie die Variableresultverwenden.Die
int.TryParse()-Methode gibttruezurück, wenn sie denstring-Variablen-valueerfolgreich in einenint-Wert umgewandelt hat; andernfalls gibt siefalsezurück. Umschließen Sie daher die Anweisung mit einerif-Anweisung, und führen Sie die Entscheidungslogik entsprechend aus.Der konvertierte Wert wird im
int-Variablen-resultgespeichert. Dieint-Variableresultwird vor dieser Codezeile deklariert und initialisiert, sodass auf sie sowohl von innerhalb der Codeblöcke, die zu den Anweisungenifundelsegehören, als auch außerhalb von ihnen zugegriffen werden kann.Das Schlüsselwort
outist eine Anweisung an den Compiler, dass dieTryParse()-Methode nicht nur einen Wert auf traditionelle Weise (als Rückgabewert) zurückgibt, sondern auch eine Ausgabe über diesen bidirektionalen Parameter übermittelt.Wenn Sie den Code ausführen, sollte die folgende Ausgabe angezeigt werden:
Measurement: 102
Verwenden des analysierten int-Werts in späterem Code
Um zu zeigen, dass die zuvor deklarierte
result-Variable durch denout-Parameter aufgefüllt wird und auch später in Ihrem Code verwendet werden kann, aktualisieren Sie Ihren Code im Visual Studio Code-Editor wie folgt:string value = "102"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); } Console.WriteLine($"Measurement (w/ offset): {50 + result}");Wählen Sie im Visual Studio Code-Menü Datei die Option Speichern aus. Die Datei „Program.cs“ muss vor dem Erstellen oder Ausführen des Codes gespeichert werden.
Klicken Sie im Panel „Explorer“ mit der rechten Maustaste auf TestProject, und klicken Sie dann auf In integriertem Terminal öffnen, um ein Terminal am Speicherort des TestProject-Ordners zu öffnen. Es sollte sich ein Terminalbereich mit einer Eingabeaufforderung öffnen, die anzeigt, dass das Terminal für den Speicherort Ihres TestProject-Ordners geöffnet ist.
Geben Sie an der Eingabeaufforderung des Terminals dotnet run ein, um Ihren Code auszuführen, und drücken Sie dann die EINGABETASTE.
Hinweis
Wenn die Meldung „Es wurde kein ausführbares Projekt gefunden“ angezeigt wird, stellen Sie sicher, dass in der Eingabeaufforderung des Terminals der erwartete Speicherort des Ordners „TestProject“ angezeigt wird. Beispiel:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Die folgende Ausgabe sollte angezeigt werden:
Measurement: 102 Measurement (w/ offset): 152Sehen Sie sich die letzte Codezeile im vorherigen Beispiel (
Console.WriteLine($"Measurement (w/ offset): {50 + result}");) an. Da dieresult-Variable außerhalb der if-Anweisung definiert ist, kann später im Code darauf zugegriffen werden.
Ändern der Zeichenfolgenvariablen in einen Wert, der nicht geparst werden kann
Betrachten Sie schließlich das andere Szenario, in dem TryParse() absichtlich ein ungültiger Wert zugewiesen wird, der nicht in einen int-Wert konvertiert werden kann.
Ändern Sie die erste Codezeile, und initialisieren Sie die Variable
valueerneut mit einem anderen Wert.string value = "bad";Ändern Sie außerdem die letzte Zeile des Codes, um sicherzustellen, dass das Ergebnis größer als 0 ist, bevor Sie die zweite Meldung anzeigen.
if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");Das gesamte Codebeispiel sollte nun mit dem folgenden Code übereinstimmen:
string value = "bad"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); } if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");Speichern Sie Ihre Codedatei, und führen Sie Ihren Code dann mit Visual Studio Code aus. Sie sollten das folgende Ergebnis erhalten:
Unable to report the measurement.Untersuchen Sie die letzten beiden Codezeilen, die im vorherigen Beispiel hinzugefügt wurden.
if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");Da
resultaußerhalb derif-Anweisung definiert ist, kann aufresultspäter in Ihrem Code außerhalb der Codeblöcke zugegriffen werden. So kannresultauf einen Wert größer als Null überprüft werden, bevorresultmit Offset als Ausgabe geschrieben werden kann. Durch die Überprüfung auf einenresult-Wert größer als Null wird das Ausgeben eines Offsetwerts nach derUnable to report the measurement.-Meldung vermieden.
Zusammenfassung
Die TryParse()-Methode ist ein wertvolles Tool. Nachfolgend sind die wichtigsten Aspekte aufgeführt, die Sie sich merken sollten.
- Verwenden Sie
TryParse(), wenn Sie eine Zeichenfolge in einen numerischen Datentyp konvertieren. TryParse()gibttruezurück, wenn die Konvertierung erfolgreich war, undfalse, wenn Sie nicht erfolgreich war.- out-Parameter bieten eine zweite Möglichkeit, dass eine Methode einen Wert zurückgibt. In diesem Fall gibt der Parameter
outden konvertierten Wert zurück. - Verwenden Sie das-Schlüsselwort
out, wenn Sie ein Argument an eine Methode übergeben, für die einout-Parameter definiert ist.