第34行-如果我在运行时不传递数据,则会出现异常
输入字符串的格式不正确
...但是当我传递数据时,我没有。另外,我还以为我已将字符串转换为整数值,所以为什么异常消息显示输入字符串?
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9aWWhBQy5qcGcifQ==” alt =“在此处输入图像描述”>
您收到例外情况是因为Console.Readline
始终返回一个字符串,然后将该字符串传递给Convert.ToInt32
,如果传入一个空字符串,则Convert.ToInt32
会引发异常。
此简短示例演示了您遇到的问题。
try {
Convert.ToInt32(""); // Let's see how ToInt32 behaves for empty strings
} catch (Exception ex ) {
Console.WriteLine($"{ex.GetType()} -> {ex.Message}");
}
输出:
System.FormatException -> Input string was not in a correct format.
这样的事情应该有所帮助。
var ageStr = Console.ReadLine();
int? age = !string.IsNullOrEmpty(ageStr)
? Int32.Parse(ageStr);
: null;
因为您正在使用用户输入int.TryParse
,所以是更好的选择。
var ageStr = Console.ReadLine();
int age;
bool success = Int32.TryParse(ageStr, out age);
if( !success ) {
Console.WriteLine($"'{ageStr}' is not an acceptable value for age.");
}
@@ tymtam的答案应该可以解决您的问题,但这是对问题的解释。的确,您使age
变量可为空。但是Convert.ToInt32()
方法的设计目的不是返回带有空字符串的null
。它期望字符串已经是数字格式。
tymtam建议的Int32.TryParse()
方法使用age
关键字将out
变量作为参数,这意味着如果可以,它将值放入age
中并返回true
。如果数字不是数字格式,它将返回false
并将age
保留为空。
Fyi,将来您提供代码时,请将其粘贴到答案中,并在代码和问题之间留一个空格。然后突出显示代码,然后单击输入框上方的{}
按钮,它将看起来像这样:
//Here is some code...