前言
在查看《隐式using指令》功能时,我们在csproj中发现这样一个属性:
那么,Nullable
到底是干嘛的?
可为空上下文
严格来说,这不是新特性,而是C# 8.0引入的特性之一。该特性用于指示引用类型是否接受null值:
只是在.NET 6以前,该特性默认是禁用的,你可以在VS2019中手工启用:
当启用该特性时,对于不接受null值的引用类型有可能收到null时,将出现警告消息。
Demo
假设有下列方法,接受一个字符串类型(引用类型)的参数:
static void test(string str)
{...
}
如果在运行时对其传入null值,则会引发System.NullReferenceException
异常:
而现在,在代码编辑器中,你将看到黄色波浪线,告诉你使用了不允许的空引用类型:
如果变量可以允许有一null值,那么只需添加一个"?":
static void test(string? str)
{Console.WriteLine(str?.Length);
}
此外,你还可使用指令在源代码的任何位置设置,明确当前文件是否使用可为空上下文:
#nullable enable
:将可为空注释上下文和可为空警告上下文设置为“已启用”。#nullable disable
:将可为空注释上下文和可为空警告上下文设置为“已禁用”。#nullable restore
:将可为空注释上下文和可为空警告上下文还原到项目设置。#nullable disable warnings
:将可为空警告上下文设置为“已禁用”。#nullable enable warnings
:将可为空警告上下文设置为“已启用”。#nullable restore warnings
:将可为空警告上下文还原到项目设置。#nullable disable annotations
:将可为空注释上下文设置为“禁用”。#nullable enable annotations
:将可为空注释上下文设置为“启用”。#nullable restore annotations
:将注释警告上下文还原到项目设置。
结论
默认开启Nullable
,好处就是在开发的时候,会不断的验证引用类型实例是否可为null,避免了引发NullReferenceException异常的很多错误。
如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“