Null 运算符和在 C# 中处理 Null 值

作者:微信公众号:【架构师老卢】
9-20 19:30
126

在 C# 中,处理 null 值对于避免常见的运行时错误(如 NullReferenceException)至关重要。本文探讨了 C# 用于管理 null 值的工具,包括 null 合并运算符、可为 null 的类型和集合中的安全做法。

介绍

处理 null 值是 C# 编程的一个关键方面,因为忽略它可能会导致 NullReferenceException,这是应用程序中的常见错误。C# 提供了多种工具和功能来有效处理 null 值,有助于提高代码的健壮性和抗错性。

Null 运算符

C# 提供了三个运算符,以便更轻松地使用 null:null 合并运算符null 合并赋值运算符null 条件运算符

Null 合并运算符

这??operator 是 null 合并运算符。它说,“如果左边的操作数是非空的,就把它给我;否则,请给我另一个值。例如:

string s1 = null;  
string s2 = s1 ?? "nothing"; // s2 evaluates to "nothing"

Null 合并赋值运算符

这??= 运算符(在 C# 8 中引入)是 null 合并赋值运算符。它说,“如果左侧的操作数为 null,则将右侧操作数分配给左侧操作数。请考虑以下事项:

myVariable ??= someDefault;

这相当于:

if (myVariable == null) myVariable = someDefault;

这??= 运算符在实现惰性计算属性时特别有用。

Null 条件运算符

这?。operator 是 null 条件或“Elvis”运算符(在 Elvis 表情符号之后)。它允许您调用方法和访问成员,就像标准点运算符一样,不同之处在于,如果左侧的操作数为 null,则表达式的计算结果为 null,而不是引发 NullReferenceException:

System.Text.StringBuilder sb = null;  
string s = sb?.ToString();

最后一行等效于以下内容:

string s = (sb == null ? null : sb.ToString());

可为 null 的值类型、可为 null 的引用类型、处理集合中的 null 值

可为 null 的值类型

C# 允许值类型(如 、 、 等)可为 null,从而使它们能够表示通常的值范围 plus .这在数据库交互等可能未定义数字的场景中非常有用。intdoublenull

int? myNullableInt = null;  
if (myNullableInt.HasValue)  
{  
    Console.WriteLine(myNullableInt.Value);  
}  
else  
{  
    Console.WriteLine("No value");  
}

可为 Null 的引用类型

从 C# 8.0 开始,可为 null 的引用类型允许开发人员批注引用类型是否应处理 null。启用此功能后,如果操作可能导致空引用异常,则会在编译时提供警告,从而促进更安全的编码实践。

#nullable enable  
string? nullableString = null;  
string nonNullableString = nullableString; // Warning: Dereference of a possibly null reference.

处理集合中的 Null 值

当使用可能包含 null 元素的集合或从数据库获取结果时,正常处理潜在的 null 非常重要。

List<string?> names = new List<string?> { "Alice", null, "Bob" };  
foreach (var name in names)  
{  
    Console.WriteLine(name?.ToUpper() ?? "Null value found");  
}

处理 null 值对于防止 C# 中的运行时错误至关重要。本文涵盖:

  • Null 运算符: 通过示例解释 null 合并 ()、null 合并赋值 () 和 null 条件 () 运算符。????=?.
  • 可为 null 的值类型: 如何在可能未定义值的情况下使用可为 null 的值类型 (、) 及其应用程序。int?double?
  • 可为 null 的引用类型: C# 8.0 中的可为 null 引用类型简介及其在编译时 null 安全中的角色。
  • 处理集合中的 Null: 处理集合和数据库结果中潜在 null 元素的策略。
相关留言评论
昵称:
邮箱:
阅读排行