如何在C#中处理空值

在任何编程语言中开发应用程序时,经常会遇到空异常或空引用异常。空指针或空引用是指不引用有效的内存位置或对象的指针。这是一个困扰程序员已经很久的问题,自从程序员开始编写程序以来。空值是一个特殊的值,表示没有有效值可用。当将空值赋给对象时,它会将对象中的字段或变量的值重置为无值,即空值。所以必须在应用程序的代码中处理空值,以避免空引用异常和运行时应用程序的意外行为。那让我们探讨一下在C#中处理空值的各种方法。要使用下面提供的代码示例,首先应该在系统中安装Visual Studio 2022。

在Visual Studio中创建一个控制台应用程序项目

首先,让我们在Visual Studio中创建一个.NET Core控制台应用程序项目。如果系统已安装Visual Studio 2022,请按照以下步骤在Visual Studio中创建一个新的.NET Core控制台应用程序项目:

  1. 启动Visual Studio IDE。

  2. 点击"创建新项目"。

  3. 在"创建新项目"窗口中,从显示的模板列表中选择"控制台应用程序 (.NET Core)"。

  4. 点击"下一步"。

  5. 在"配置新项目"窗口中,指定新项目的名称和位置。

  6. 点击"下一步"。

  7. 在接下来显示的"附加信息"窗口中,选择".NET 7.0 (标准支持期)"作为您要使用的框架版本。

  8. 点击"创建"。

我们将使用这个.NET 7控制台应用程序项目来处理接下来文章中的空值。我们将探讨在C#中处理空值的五种方法。可以根据对应的应用程序的需求选择使用哪种方法。

C#中的空条件运算符(?.)

当对象不为null时,您可以使用空条件运算符(?.)访问其成员(数据成员和方法)。如果对象为null,空条件运算符将返回null,但在访问对象的成员时不会引发运行时异常。考虑以下类的示例:

csharp 复制代码
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。

ini 复制代码
Author author = new Author();
author.FirstName = "Joydip";
author.LastName = "Kanjilal";
int length = author.Address.Length;

当执行上述代码片段时,将会遇到一个运行时异常,如下图所示。

图一:空引用异常

以下代码示例展示了如何在C#中使用空条件运算符来避免运行时异常。

ini 复制代码
Author author = new Author();
author.FirstName = "Joydip";
author.LastName = "Kanjilal";
author.Address = null;
int? length = author.Address?.Length;

C#中的空合并赋值操作符(??=)

当左操作数的值为null时,空合并赋值运算符将右操作数的值赋给左操作数。以下是一个在C#中使用该运算符的示例:

ini 复制代码
Author author = new Author();
author.FirstName = "Joydip";
author.LastName = "Kanjilal";
author.Address = null;
author.Address ??= "Default";
Console.WriteLine(author.Address);

C#中的空值忽略运算符(!.)

空值忽略或空值抑制运算符(!)允许在表达式中抑制所有警告。只有在确信属性或对象的值不会为null,并且希望抑制知道是错误的警告时,才应使用此运算符。以下代码片段演示了如何使用空值忽略运算符:

ini 复制代码
Author author = new Author();
author.FirstName = "Joydip";
author.LastName = "Kanjilal";
author.Address = null!;
int length = author.Address.Length;
Console.WriteLine(length);

C#中的条件运算符 (?:)

可以使用条件运算符 (?:) 来评估包含其中一个操作数为null值的表达式。条件运算符也被称为三元条件运算符,因为使用该运算符的语句有三个部分:条件(布尔表达式)、结果表达式和备选表达式。如果条件为真,则结果表达式(在冒号左侧)将被评估/返回。如果条件为假,则备选表达式(在冒号右侧)将被评估/返回。以下是一个示例,演示了如何在表达式中使用条件运算符来处理null值:

ini 复制代码
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值。

ini 复制代码
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开发工具等

相关推荐
时光追逐者5 小时前
TIOBE 公布 C# 是 2025 年度编程语言
开发语言·c#·.net·.net core·tiobe
花归去6 小时前
echarts 柱状图曲线图
开发语言·前端·javascript
喝拿铁写前端6 小时前
当 AI 会写代码之后,我们应该怎么“管”它?
前端·人工智能
老前端的功夫6 小时前
TypeScript 类型魔术:模板字面量类型的深层解密与工程实践
前端·javascript·ubuntu·架构·typescript·前端框架
又是忙碌的一天6 小时前
SpringBoot 创建及登录、拦截器
java·spring boot·后端
观无6 小时前
固高运动控制卡(GST800)基础应用分享
c#
fox_mt6 小时前
AI Coding - ClaudeCode使用指南
java·ai编程
Nan_Shu_6146 小时前
学习: Threejs (2)
前端·javascript·学习
G_G#6 小时前
纯前端js插件实现同一浏览器控制只允许打开一个标签,处理session变更问题
前端·javascript·浏览器标签页通信·只允许一个标签页
毕设源码-郭学长6 小时前
【开题答辩全过程】以 基于SSM的高校运动会管理系统的设计与实现为例,包含答辩的问题和答案
java·eclipse