跳至页脚内容
Iron Academy Logo
学习 C#
学习 C#

其他类别

了解 C# 空凝聚操作符

C# 中的 null coalescing 操作符 (??) 允许开发人员简化 null 检查逻辑,减少代码冗余并提高可读性。 该操作符提供了一种简洁的方法,可在遇到 null 时分配回退值,而无需编写冗长的 if-else 条件。 在本文中,我们将跟随 Gerald Versluis 的视频"了解 C# 空凝聚操作符(? 和??=)"。我们将分解视频的关键部分,分析 Gerald 如何演示这一实用的 C# 功能。

简介

在视频的开头,Gerald 介绍了空值凝聚运算符,它是 C# 的一项强大功能,可以大大减少空值检查所需的代码行数。 他强调,该操作符简化了条件检查,使代码更具可读性。 为了说明这些工具的优势,Gerald 通过一个示例应用程序,实现并解释了 null coalescing 操作符的各种用例。

示例应用程序大纲

Gerald 首先设置了一个简单的控制台应用程序。 他提到,在以前的视频中,他曾使用 try.dot.net 网站进行演示,但由于版本限制(仅支持 C# 7),他改用 Visual Studio for Mac。 他保证这些示例也能在 Visual Studio for Windows 上使用。

为了准备演示,Gerald 创建了一个基本的Name属性:

public class Person 
{
    public string Name { get; set; }
}
public class Person 
{
    public string Name { get; set; }
}

然后,他初始化了该类的一个实例,以展示 null coalescing 运算符在实际场景中的功能。

用空-凝聚操作符(?

Gerald 现在演示如何使用空凝聚运算符 (??) 来简化空检查逻辑。 他将空值赋给Name属性,然后使用?? 以提供后备值:

var name = person.Name ?? "Gerald";
var name = person.Name ?? "Gerald";

Gerald 解释说,在使用该操作符之前,开发人员会使用 if 语句:

string name;
if (person.Name == null)
{
    name = "Gerald";
}
else
{
    name = person.Name;
}
string name;
if (person.Name == null)
{
    name = "Gerald";
}
else
{
    name = person.Name;
}

通过使用??,该逻辑简化为一行。当person.Name为空时,赋值为"Gerald"; 否则,person.Name保持其值不变。 他运行程序并确认输出正确无误。

空凝聚以抛出异常

接下来,Gerald 将探讨另一个用例:使用空凝聚运算符抛出异常。 他演示了如何在遇到 null 时抛出异常,而不是提供一个后备值:

var name = person.Name ?? throw new ArgumentNullException(nameof(person.Name), "Name cannot be null");
var name = person.Name ?? throw new ArgumentNullException(nameof(person.Name), "Name cannot be null");

Gerald 强调指出,这在处理方法参数或属性(不允许使用 null)时尤其有用。 他解释说,这一功能是在 C# 7 或 8 中引入的,具体取决于项目设置。 在ArgumentNullException,有效地防止了意外的空引用。

空凝聚复合赋值 (??=).

Gerald 接着讨论了 null coalescing 复合赋值 (??=) 操作符,该操作符提供了一种更加简化的默认值赋值方式。 而不是写成

if (person.Name == null)
{
    person.Name = "Gerald";
}
if (person.Name == null)
{
    person.Name = "Gerald";
}

他简化了这一点:

person.Name ??= "Gerald";
person.Name ??= "Gerald";

Gerald 解释说,??= 只有在左侧操作数为空的情况下才赋值。 如果person.Name已具有值,则保持不变。 该操作符对于初始化字段或确保变量永不为空特别有用。

与 Null 条件操作符结合使用

在最后一节中,Gerald 演示了空凝聚运算符如何与空条件运算符 (?.) 结合使用。 空条件运算符允许安全访问属性而不会引发NullReferenceException。 他举了一个例子:

var length = person?.Name?.Length ?? 0;
var length = person?.Name?.Length ?? 0;

Gerald 解释说,这确保了如果Name为空,结果将默认为0,而不是抛出异常。 这种组合在处理空引用类型或复杂对象层次结构时非常有用。

结论

在整个视频中,Gerald Versluis 有效地解释了空凝聚运算符 (??) 和空凝聚复合赋值 (??=) 的强大功能。 他演示了这些运算符如何取代传统的 null 检查,使代码更加简洁易读。 通过利用这些功能,开发人员可以编写出更简洁、更高效的 C# 应用程序。

如果您有兴趣了解这些概念的实际应用,请查看 Gerald Versluis 的完整视频 "了解 C# 空凝聚操作符(? 和 ?=)"。

Hero Worlddot related to 了解 C# 空凝聚操作符
Hero Affiliate related to 了解 C# 空凝聚操作符

分享您的所爱,赚取更多收入

您为使用 .NET、C#、Java、Python 或 Node.js 的开发人员创建内容吗?将您的专业知识转化为额外收入!

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我