C# 作为整数的空值

C# 作为整数的空值,c#,console,C#,Console,第34行-如果我在运行时没有传递数据,我会得到一个异常 输入字符串的格式不正确 …但当我传递数据时,我不会。另外,我认为我已经将字符串转换成了一个整数值,那么为什么异常消息会显示input string 发生了什么事? 你得到这个例外是因为 Console.Readline始终返回一个字符串,然后将其传递给Convert.ToInt32,如果传入空字符串,Convert.ToInt32将引发异常 这个简短的示例演示了您遇到的问题 try { Convert.ToInt32(""); //

第34行-如果我在运行时没有传递数据,我会得到一个异常

输入字符串的格式不正确

…但当我传递数据时,我不会。另外,我认为我已经将字符串转换成了一个整数值,那么为什么异常消息会显示input string

发生了什么事? 你得到这个例外是因为 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.");
}

@廷坦的回答应该能解决你的问题,但这里有一个关于问题的解释。确实,您使年龄变量为空。但是Convert.ToInt32方法不是设计为返回空字符串的null;它希望字符串已经是数字格式

tymtam建议的Int32.TryParse方法使用out关键字将age变量作为参数,这意味着如果可以,它将值放入age并返回true。如果数字不是数字格式,它将返回false并将age保留为null

仅供参考,将来当您提供代码时,请将其粘贴到您的答案中,并在答案和问题之间留出一个空格。然后突出显示代码并单击输入框上方的{}按钮,使其看起来像这样:

//Here is some code...

欢迎来到StackOverflow。感谢您抽出时间分享您的问题。你的问题质量不高。你的目标和困难是什么?到目前为止你做了什么?请尝试更好地解释您的问题、您的开发环境和数据结构,并共享更多代码—无屏幕截图、屏幕图像或草图、用户故事或场景图。为了帮助您改进您的请求,请阅读右上角的和我避免问的问题。@Olivier我看不出这个问题有什么问题,除非在您撰写此邮件后对其进行了编辑。提问者给出他们的代码,解释出哪里出了问题以及他们的预期,并询问为什么代码不起作用。如果他们粘贴代码而不是屏幕截图会更好,但除此之外,它的格式是正确的?提供的图像而不是代码很小且不可读。。。这就是问题所在:这是一个屏幕截图,它被缩小了一半…这个答案无助于帮助OP了解问题所在。我以为它与string.IsNullOrEmpty部分有关,但我听到了,我扩展了答案。谢谢更新+1是的,你的原稿没有问题不要这样做…做这个答案,但在这种情况下,OP想知道问题是什么-你现在已经解决了。做得好。Mods:请删除此评论