作为整数的空值

问题描述 投票:-1回答:2

第34行-如果我在运行时不传递数据,则会出现异常

输入字符串的格式不正确

...但是当我传递数据时,我没有。另外,我还以为我已将字符串转换为整数值,所以为什么异常消息显示输入字符串?

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9aWWhBQy5qcGcifQ==” alt =“在此处输入图像描述”>

c# console
2个回答
1
投票

发生了什么事?

您收到例外情况是因为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.");
}

0
投票

@@ tymtam的答案应该可以解决您的问题,但这是对问题的解释。的确,您使age变量可为空。但是Convert.ToInt32()方法的设计目的不是返回带有空字符串的null。它期望字符串已经是数字格式。

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

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

//Here is some code...
© www.soinside.com 2019 - 2024. All rights reserved.