HOWTO · Csharp
Integer von der Konsole lesen in C#
Es gibt drei Hauptmethoden, mit denen ein ganzzahliger Wert von der Konsole in C# gelesen werden kann: die Methoden int.Parse(), int.TryParse() und Convert.ToInt32().
Auf dieser Seite
Um eine Ganzzahl aus einer C#-Konsole einzulesen, lesen Sie zuerst mit Console.ReadLine() eine Zeile ein und wandeln anschließend deren Text um. Wenn Nutzende unerwartete Eingaben machen könnten, verwenden Sie int.TryParse(): Die Methode gibt an, ob die Umwandlung erfolgreich war, und ermöglicht es, ungültige Eingaben regulär im Programmablauf zu behandeln. Dieser Leitfaden vergleicht int.Parse(), int.TryParse() und Convert.ToInt32() für die zeilenweise Eingabe.
Eine Ganzzahl mit int.Parse() aus der Konsole einlesen
int.Parse() wandelt eine Zeichenfolge mit einer gültigen 32-Bit-Ganzzahl in einen int um. Die Methode ist knapp und eignet sich, wenn die Eingabe vertrauenswürdig ist oder der umgebende Code Umwandlungsfehler behandelt.
Dieses vollständige Programm liest eine Zeile ein und gibt den umgewandelten Wert aus:
using System;
using System.IO;
class Program
{
static void Main()
{
Console.SetIn(new StringReader("42"));
Console.Write("Enter an integer: ");
string input = Console.ReadLine();
int value = int.Parse(input);
Console.WriteLine($"You entered: {value}");
}
}
Enter an integer: You entered: 42
Text, das keine Ganzzahl darstellt, löst eine FormatException aus; ein Wert außerhalb des Int32-Bereichs führt zu einer OverflowException. In einer echten Konsolensitzung gibt Console.ReadLine() null zurück, wenn der Eingabestrom endet, bevor eine Zeile gelesen wurde. Wird dieser Wert an int.Parse() übergeben, entsteht eine ArgumentNullException. Prüfen Sie daher zuerst auf null, wenn ein Eingabeende möglich ist. Das Beispiel stellt 42 über einen StringReader bereit und bleibt dadurch in sich abgeschlossen.
Eine Ganzzahl mit int.TryParse() aus der Konsole einlesen
Für interaktive Eingaben ist int.TryParse() meist die klarste Wahl, weil der Erfolg der Umwandlung Teil des normalen Programmablaufs ist. Wenn der Text eine Ganzzahl innerhalb des gültigen Wertebereichs darstellt, gibt die Methode true zurück und weist der out-Variablen die umgewandelte Zahl zu. Andernfalls gibt sie false zurück und weist dieser Variablen den Standardwert (0) zu. Prüfen Sie den booleschen Rückgabewert, bevor Sie die Zahl verwenden.
using System;
using System.IO;
class Program
{
static void Main()
{
Console.SetIn(new StringReader("42"));
Console.Write("Enter an integer: ");
string input = Console.ReadLine();
int value;
if (int.TryParse(input, out value))
{
Console.WriteLine($"You entered: {value}");
}
else
{
Console.WriteLine("Enter a whole number within the Int32 range.");
}
}
}
Enter an integer: You entered: 42
Bei nicht numerischem Text, einem Eingabeende oder einem Wert außerhalb des int-Bereichs gibt TryParse false zurück. Daher gibt das Programm die Meldung im else-Zweig aus. Sie können die Eingabeaufforderung und die Prüfung in eine Schleife setzen, damit die Person es erneut versuchen kann; dieses Beispiel gibt eine Rückmeldung aus und beendet sich dann. Der StringReader stellt hier 42 bereit, damit das Beispiel in sich abgeschlossen ist.
Eine Ganzzahl mit Convert.ToInt32() aus der Konsole einlesen
Convert.ToInt32() ist eine weitere Möglichkeit, die von Console.ReadLine() zurückgegebene Zeile umzuwandeln. Bei numerischem Text liefert die Methode denselben int-Wert wie int.Parse(). Beliebiger Text wird dadurch jedoch nicht sicher umgewandelt: Nicht numerischer Text kann eine FormatException auslösen, und ein Wert außerhalb des Int32-Bereichs kann zu einer OverflowException führen. Eine null-Zeichenfolge ist ein Sonderfall: Convert.ToInt32((string)null) gibt 0 zurück, während int.Parse(null) eine ArgumentNullException auslöst.
using System;
using System.IO;
class Program
{
static void Main()
{
Console.SetIn(new StringReader("42"));
Console.Write("Enter an integer: ");
string input = Console.ReadLine();
int value = Convert.ToInt32(input);
Console.WriteLine($"You entered: {value}");
}
}
Enter an integer: You entered: 42
Verwenden Sie int.TryParse(), wenn eine Person die Eingabe macht und ein regulärer Prüfpfad hilfreich ist. Nutzen Sie int.Parse() oder Convert.ToInt32(), wenn der aufrufende Code Umwandlungsfehler behandeln soll. In diesen Konsolenbeispielen beginnen alle drei Methoden mit Console.ReadLine(); sie unterscheiden sich darin, wie sie Umwandlungsergebnisse und besondere Eingabewerte behandeln.