在任何编程语言中开发应用程序时,经常会遇到空异常或空引用异常。空指针或空引用是指不引用有效的内存位置或对象的指针。这是一个困扰程序员已经很久的问题,自从程序员开始编写程序以来。空值是一个特殊的值,表示没有有效值可用。当将空值赋给对象时,它会将对象中的字段或变量的值重置为无值,即空值。所以必须在应用程序的代码中处理空值,以避免空引用异常和运行时应用程序的意外行为。那让我们探讨一下在C#中处理空值的各种方法。要使用下面提供的代码示例,首先应该在系统中安装Visual Studio 2022。
在Visual Studio中创建一个控制台应用程序项目
首先,让我们在Visual Studio中创建一个.NET Core控制台应用程序项目。如果系统已安装Visual Studio 2022,请按照以下步骤在Visual Studio中创建一个新的.NET Core控制台应用程序项目:
- 启动Visual Studio IDE。
- 点击“创建新项目”。
- 在“创建新项目”窗口中,从显示的模板列表中选择“控制台应用程序 (.NET Core)”。
- 点击“下一步”。
- 在“配置新项目”窗口中,指定新项目的名称和位置。
- 点击“下一步”。
- 在接下来显示的“附加信息”窗口中,选择“.NET 7.0 (标准支持期)”作为您要使用的框架版本。
- 点击“创建”。
我们将使用这个.NET 7控制台应用程序项目来处理接下来文章中的空值。我们将探讨在C#中处理空值的五种方法。可以根据对应的应用程序的需求选择使用哪种方法。
C#中的空条件运算符(?.)
当对象不为null时,您可以使用空条件运算符(?.)访问其成员(数据成员和方法)。如果对象为null,空条件运算符将返回null,但在访问对象的成员时不会引发运行时异常。考虑以下类的示例:
public class Author
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
}
现在编写以下代码来创建一个Author对象,为FirstName和LastName属性赋值,并获取Address属性的长度。请注意,我们没有为Address属性赋值,因此它被设置为null。
Author author = new Author();
author.FirstName = "Joydip";
author.LastName = "Kanjilal";
int length = author.Address.Length;
当执行上述代码片段时,将会遇到一个运行时异常,如下图所示。
图一:空引用异常
以下代码示例展示了如何在C#中使用空条件运算符来避免运行时异常。
Author author = new Author();
author.FirstName = "Joydip";
author.LastName = "Kanjilal";
author.Address = null;
int? length = author.Address?.Length;
C#中的空合并赋值操作符(??=)
当左操作数的值为null时,空合并赋值运算符将右操作数的值赋给左操作数。以下是一个在C#中使用该运算符的示例:
Author author = new Author();
author.FirstName = "Joydip";
author.LastName = "Kanjilal";
author.Address = null;
author.Address ??= "Default";
Console.WriteLine(author.Address);
C#中的空值忽略运算符(!.)
空值忽略或空值抑制运算符(!)允许在表达式中抑制所有警告。只有在确信属性或对象的值不会为null,并且希望抑制知道是错误的警告时,才应使用此运算符。以下代码片段演示了如何使用空值忽略运算符:
Author author = new Author();
author.FirstName = "Joydip";
author.LastName = "Kanjilal";
author.Address = null!;
int length = author.Address.Length;
Console.WriteLine(length);
C#中的条件运算符 (?😃
可以使用条件运算符 (?😃 来评估包含其中一个操作数为null值的表达式。条件运算符也被称为三元条件运算符,因为使用该运算符的语句有三个部分:条件(布尔表达式)、结果表达式和备选表达式。如果条件为真,则结果表达式(在冒号左侧)将被评估/返回。如果条件为假,则备选表达式(在冒号右侧)将被评估/返回。以下是一个示例,演示了如何在表达式中使用条件运算符来处理null值:
Author author = new Author();
author.FirstName = "Joydip";
author.LastName = "Kanjilal";
author.Address = null!;
string result = (author.Address != null) ? author.Address : "Unknown";
Console.WriteLine(result);
C#中的is运算符(类型判断运算符)
还可以使用关键字is
来检查一个值是否为null。这个关键字(同时也是一个运算符)可以用于比较常量值甚至null值。以下代码片段展示了如何在C#中使用这个运算符来处理null值。
Author author = new Author();
author.FirstName = "Joydip";
author.LastName = "Kanjilal";
author.Address = null!;
if(author.Address != null)
{
Console.WriteLine(author.Address);
}
else
{
Console.WriteLine("The value of the Address property is null");
}
除了上面提到的五种技术之外,还可以使用C#中的其他运算符来检查null值。使用这里展示的运算符来处理null值的主要目标是避免编写处理异常的代码。使用这些技术,可以保持代码的整洁和可管理性。
作者:Joydip Kanjilal
更多技术干货请关注公众号“云原生数据库”
squids.cn,目前可体验全网zui低价RDS,免费的迁移工具DBMotion、SQL开发工具等。