📅  最后修改于: 2023-12-03 15:41:06.125000             🧑  作者: Mango
在 C# 开发中,空类型是一个非常常见的问题。程序员必须时刻检查程序中的变量、属性和方法是否为 null,否则会引发异常。为了解决这个问题,C# 提供了多种方法和语法,帮助开发者更快速、更安全地处理空类型。
?
和 ??
C# 中的操作符 ?
和 ??
是两种最常见的处理空值的方法。操作符 ?
被称为“空合并运算符”,它可以用来检查空值并设置默认值。例如,以下代码将检查 stringValue
是否为空,并将其赋值为 "default"
:
string newValue = stringValue ?? "default";
其中 ??
表示如果 stringValue
为空,则使用 "default"
。
操作符 ?
和 ??
可以组合使用,以更精确地检查和设置变量的值。例如,以下代码将检查 stringValue
和 intValue
是否为空,并且如果它们都不为空,则对它们进行相乘:
int result = (stringValue?.Length ?? 0) * (intValue ?? 1);
在这个例子中,stringValue?.Length
表示如果 stringValue
不为空,则返回其长度,否则返回 null
。??0
表示如果结果为 null
,则将其设置为 0
。同样,如果 intValue
为空,则使用默认值 1
。
C# 6.0 引入了一种更简单的语法来检查空类型。它允许我们使用 ?.
运算符来调用对象的属性或方法,而不必明确检查对象是否为空。例如,以下代码将检查 person
是否为空,如果不为空,则获取其姓名的长度:
int nameLength = person?.Name.Length ?? 0;
在这个例子中,我们使用 ?.
来获取 person
的 Name
属性,而不必检查 person
是否为 null
。如果 person
为空,则返回 null
,否则返回 Name
的长度。最后,我们使用 ??
运算符来设置默认值为 0
。
C# 8.0 引入了一种新的语法来处理空值,它使得空检查变得更加容易和直观。我们可以使用 !
运算符来告诉编译器,我们已经检查过一个变量的空值,并且确定它不为空。例如,以下代码将检查 person
是否为空,并将其转换为非空类型:
Person nonNullPerson = person!;
在这个例子中,我们使用了 !
运算符,告诉编译器 person
不为空。如果 person
确实为空,那么将抛出一个 NullReferenceException
异常。
除了 !
运算符,C# 8.0 还提供了一些新的语法来处理空类型。例如,我们可以使用 ?
运算符来检查一个属性或方法是否为空,并在其上调用其他方法,例如:
person?.Method()?.AnotherMethod();
在这个例子中,person
可能为空,所以 ?.
运算符用来检查它。如果 person
不为空,则调用 Method()
,然后调用 AnotherMethod()
;如果 person
为空,则整行代码不执行。
以上是 C# 中处理空类型的一些常见方法和语法,以及它们的用法和用途。掌握这些方法,有助于开发者更快速、更安全地处理空类型,避免代码中的物理错误。如果您还不熟悉这些语法,请参考 MSDN 文档并进行深入学习。