如何在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开发工具等

相关推荐
用户059540174461 小时前
把AI对话记忆存储测试从手工改成Playwright+pytest,覆盖率从20%提到96%,回归时间缩短90%
前端·css
kyriewen1 小时前
别再这样写TypeScript了——Code Review中最常见的8个反模式
前端·javascript·typescript
都叫我大帅哥1 小时前
Java JJWT 完全指南:从入门到生产级实践
java
名字还没想好☜1 小时前
Next.js ‘use client‘ 到底加在哪:Server/Client Components 边界与常见报错
开发语言·前端·javascript·react·next.js
午安~婉2 小时前
GitHub Token/ GitHub Stats统计显示图异常
前端·github·vercel·github token
码云之上2 小时前
AI Agent 工程化总览篇:从 Prompt 到 Harness
前端·人工智能
2501_926978332 小时前
以说明书 DNA 为模板——完整 AGI 的结构图景
前端·人工智能·经验分享·笔记·ai写作
IT_陈寒2 小时前
Vite静态资源引用这个坑我踩得有点疼
前端·人工智能·后端
前端开发张小七3 小时前
Java 学习笔记 · 第一课:基础语法与核心概念
java·后端
海盗12343 小时前
微软技术周报 ——2026-08-03
后端·python·microsoft·c#·.netcore