Я предлагаю вам использовать TryParse
:
Console.WriteLine("1. Add account.");
Console.WriteLine("Enter choice: ");
string input = Console.ReadLine();
int number;
Int32.TryParse(input, out number);
Таким образом, ваше приложение не генерирует исключение, если вы пытаетесь разобрать что-то вроде «1q» или «23e», потому что кто-то сделал ошибку.
Int32.TryParse
возвращает логическое значение, поэтому вы можете использовать его в инструкции if
, чтобы узнать, нужно ли вам разветвлять ваш код:
int number;
if(!Int32.TryParse(input, out number))
{
//no, not able to parse, repeat, throw exception, use fallback value?
}
На ваш вопрос: вы не найдете решения для чтения целого числа, потому что ReadLine()
читает всю командную строку, threfor возвращает строку. Что вы можете сделать, попробуйте преобразовать этот вход в переменную int16 / 32/64.
Для этого существует несколько методов:
Если у вас есть сомнения относительно ввода, который должен быть преобразован, всегда используйте методы TryParse, независимо от того, пытаетесь ли вы проанализировать строки, переменную int или что нет.
Update В C # 7.0 переменные out могут быть объявлены непосредственно там, где они передаются в качестве аргумента, поэтому приведенный выше код можно сконденсировать в это:
if(Int32.TryParse(input, out int number))
{
/* Yes input could be parsed and we can now use number in this code block
scope */
}
else
{
/* No, input could not be parsed to an integer */
}
Полный пример будет выглядеть следующим образом:
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();
}
}
Здесь вы можете видеть, что переменная number1
действительно инициализируется, даже если вход не является числом и имеет значение 0 независимо, поэтому он действителен даже вне объявления, если блок