C#新特性之可空引用类型
在 C# 8.0 版本中,引入了一种全新的类型——可空引用类型。这种类型让我们能够更精确的掌控和避免代码中可能存在的 null 引用异常(NullReferenceException)。
可空引用类型的定义
可空引用类型是一种新的变量类型,允许存储 null 值。在使用可空引用类型时,我们必须使用 ? 操作符将类型名称与声明分开。
string? name = null;
在可空引用类型的声明中,变量名后必须加一个问号(?)这一点与普通的引用类型稍有不同。这是因为可空引用类型本身允许存储 null 值。
可空引用类型的使用
当我们使用了可空引用类型后,变量在赋值时需要与 null 做一个判断。
string? name = null;
if(name != null)
{
Console.WriteLine(name.Length);
}
这里我们加入了一个 if 语句用于判断 name 是否为 null,如果不为 null,则可以调用 name 上面的 Length 属性。否则,程序不会尝试使用 null 值,也没有了 NullReferenceException 异常。
可空引用类型的其他特性
默认情况下是关闭的
C# 8.0 中的可空引用类型默认是关闭的,意味着编译器不会产生任何警告或错误信息。我们可以手动开启可空引用类型检查,即使代码中忘记判定 null 或者没有经过充分初始化,编译器都会提醒我们,并且还会进行一些额外的检查。
需要标注为可空类型
由于可空引用类型是一种新的类型,在代码中我们必须对其进行标注,否则编译器会给出警告。对于不确定是否为 null 的代码块,比如对于函数参数或者返回值,我们应该使用可空引用类型。
可空引用类型的上下文感知
可空引用类型会在上下文感知到自身能够为 null 的可能性,这意味着编译器可以揭示出代码中潜在的缺陷。例如,编译器会检查所有变量是否已经初始化。
示例说明
在代码中,如果我们想要使用可空引用类型,可以使用以下代码:
string? myName;
// 编译器会提醒我们,我们忘记给 myName 赋值了
Console.WriteLine(myName.ToUpper());
输出结果:
warning CS8602: Dereference of a possibly null reference.
在这个示例中,我们没有为 myName 赋值。因此,当我们尝试使用它上面的 ToUpper 方法时,编译器会提醒我们可能存在 null 引用。
另外,如果我们将下面的注释去掉,可以启用 C# 的可空引用类型检查功能,即使代码中忘记判定 null 或者没有经过充分初始化,编译器都会提醒我们,并且还会进行一些额外的检查。
#nullable enable
string myName;
if (myName != null)
{
Console.WriteLine(myName.ToUpper());
}
这里使用了 #nullable enable 命令启用了 C# 的可空引用类型检查功能,可以对代码进行更严格的检查,防止空指针异常的出现。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#新特性之可空引用类型 - Python技术站