我建议您使用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))
{
}
您的问题:由于ReadLine()
读取整个命令行,因此不会找到读取整数的解决方案,threfor返回一个字符串。您可以做的是,尝试将此输入转换为int16 / 32/64变量。
有几种方法可以做到这一点:
如果您不确定要转换的输入,请始终使用TryParse方法,无论您尝试解析字符串,int变量还是什么都不解析。
在C#7.0中,在变量作为参数传入的地方可以直接声明Update,因此可以将上面的代码压缩为:
if(Int32.TryParse(input, out int number))
{
}
else
{
}
一个完整的示例如下所示:
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 ,该变量的确会被初始化,因此即使在声明if块之外也有效
ReadLine
,应该将返回值保存在其中,string
然后尝试将其转换为int
(可能Int32.TryParse
带有或其他anstry / catch
),如果没有输入int
,请提示用户再次尝试。