如何解决VS Code中“将null转换为非nullable类型”的错误?
解决Console.ReadLine()的空值转换错误
你遇到的错误是因为C# 8.0及以上版本引入了可空引用类型检查:Console.ReadLine()的返回值是string?(可空字符串类型)——当输入流结束时它会返回null,但你把它赋值给了非可空的string变量,编译器会提示这个空值转换风险。
下面是几种可行的解决方法:
方法1:使用可空字符串声明变量
直接把变量类型改为string?,允许变量接收null值:
class Program { static void Main() { Console.WriteLine("Calc v0.1"); Console.WriteLine("Enter:"); string? num1 = Console.ReadLine(); string? num2 = Console.ReadLine(); Console.WriteLine(num1 + num2); } }
方法2:给变量设置默认值(避免null)
用空合并运算符??,如果Console.ReadLine()返回null,就用默认值(比如空字符串)替代:
class Program { static void Main() { Console.WriteLine("Calc v0.1"); Console.WriteLine("Enter:"); string num1 = Console.ReadLine() ?? ""; string num2 = Console.ReadLine() ?? ""; Console.WriteLine(num1 + num2); } }
方法3:强制非空断言(谨慎使用)
如果你能确保输入永远不会返回null,可以用!标记强制编译器忽略空值检查,但如果实际出现null,运行时会抛出NullReferenceException:
class Program { static void Main() { Console.WriteLine("Calc v0.1"); Console.WriteLine("Enter:"); string num1 = Console.ReadLine()!; string num2 = Console.ReadLine()!; Console.WriteLine(num1 + num2); } }
方法4:关闭可空引用类型检查(不推荐)
如果你不需要这个空安全特性,可以修改项目的.csproj文件,把<Nullable>enable</Nullable>改为<Nullable>disable</Nullable>,这样编译器就不会再提示这类错误,但会失去空值风险的编译检查。
内容的提问来源于stack exchange,提问作者marc77
相关产品推荐
相关产品推荐

