Ich würde vorschlagen, dass Sie verwenden TryParse
:
Console.WriteLine("1. Add account.");
Console.WriteLine("Enter choice: ");
string input = Console.ReadLine();
int number;
Int32.TryParse(input, out number);
Auf diese Weise löst Ihre Anwendung keine Ausnahme aus, wenn Sie versuchen, etwas wie "1q" oder "23e" zu analysieren, weil jemand eine fehlerhafte Eingabe vorgenommen hat.
Int32.TryParse
Gibt einen booleschen Wert zurück, sodass Sie ihn in einer if
Anweisung verwenden können, um festzustellen, ob Sie Ihren Code verzweigen müssen oder nicht:
int number;
if(!Int32.TryParse(input, out number))
{
}
Zu Ihrer Frage: Sie werden keine Lösung zum Lesen einer Ganzzahl finden, da ReadLine()
die gesamte Befehlszeile gelesen wird und drei Zeichenfolgen zurückgegeben werden. Sie können versuchen, diese Eingabe in eine Variable int16 / 32/64 zu konvertieren.
Hierfür gibt es verschiedene Methoden:
Wenn Sie Zweifel an der zu konvertierenden Eingabe haben, wählen Sie immer die TryParse-Methoden, unabhängig davon, ob Sie versuchen, Zeichenfolgen, int-Variablen oder was nicht zu analysieren.
Update
In C # 7.0 out-Variablen können direkt dort deklariert werden, wo sie als Argument übergeben werden, sodass der obige Code wie folgt zusammengefasst werden kann:
if(Int32.TryParse(input, out int number))
{
}
else
{
}
Ein vollständiges Beispiel würde folgendermaßen aussehen:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
var foo = Console.ReadLine();
if (int.TryParse(foo, out int number1)) {
Console.WriteLine($"{number1} is a number");
}
else
{
Console.WriteLine($"{foo} is not a number");
}
Console.WriteLine($"The value of the variable {nameof(number1)} is {number1}");
Console.ReadLine();
}
}
Hier können Sie sehen, dass die Variable number1
auch dann initialisiert wird, wenn die Eingabe keine Zahl ist und unabhängig davon den Wert 0 hat, sodass sie auch außerhalb des deklarierenden if-Blocks gültig ist
ReadLine
haben. Sie sollten den Rückgabewert beibehaltenstring
und versuchen, ihn inint
(möglicherweiseInt32.TryParse
oder andere ans mittry / catch
) zu konvertieren. Wenn der Eintrag nicht erfolgtint
, fordern Sie den Benutzer zu einem weiteren Versuch auf.