c# ?? 、?.、??=、?[]运算符的使用

本文介绍了C#中用于处理null值的几种特殊运算符,如Null合并运算符??,Null条件运算符?.和?[],以及新引入的Null合并赋值运算符??=,这些运算符提升了代码简洁性和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在 C# 中存在一些特殊的运算符,它们简化了代码的编写,主要用于处理空值(null)或简化成员访问。以下是一些常用的这类运算符:

?? - Null 合并运算符

Null 合并运算符 ?? 在左侧的操作数不为 null 时返回左侧的操作数,若为 null 时则返回右侧的操作子。

string name = null;
string username = name ?? "Guest";
// username 的值是 "Guest",因为 name 为 null

在 C# 8.0 及以后的版本中,还加入了 null 合并赋值运算符 ??=,它可以用来只在左侧操作数为 null 时,才将右侧操作数赋值给左侧。

string name = null;
name ??= "Guest";
// name 的值现在是 "Guest"

?. - Null 条件运算符

Null 条件运算符 ?. 允许在访问对象的成员之前检查是否该对象为 null。如果对象为 null,则返回 null 而不是抛出 NullReferenceException

string name = person?.Name; // 如果 person 不为 null,则返回 person.Name;否则返回 null

该运算符也可以用于链式调用,如 person?.Job?.Title

?[] - Null 条件索引运算符

Null 条件索引运算符 ?[] 允许在对集合进行索引操作前检查集合是否为 null。

var value = dictionary?["key"]; // 如果 dictionary 不为 null,尝试获取 "key" 的值;否则返回 null

?? - Null 合并运算符(可链接)

你也可以将多个 null 合并运算符链接在一起,为连续的可能为 null 的表达式提供回退值。

string name = first ?? second ?? "Default";
// first 和 second 都为 null 时,name 的值为 "Default"

?. 和 ?? - 组合使用

你可以组合使用 null 条件运算符和 null 合并运算符,以处理可能为 null 的对象并提供默认值。

string title = person?.Job?.Title ?? "Unemployed";
// 如果 person 或 Job 为 null,title 的值为 "Unemployed"

=> - Lambda 表达式

虽然不是用来处理 null,但 => 是 C# 中另一个常用的运算符,它用来定义 lambda 表达式,描述匿名函数的简短语法。

Func<int, int> square = x => x * x; // 定义一个返回输入值平方的 lambda 表达式
int result = square(5); // result 为 25

??= - Null 合并赋值运算符(C# 8.0)

该运算符是在 C# 8.0 中新加入的,它用来特别简化 null 的检查和赋值语句。

string name = null;
name ??= "Guest"; // 如果 name 为 null,则赋值为 "Guest";否则保持不变

这些运算符极大地简化了与 null 相关的代码,减少了冗长和可能出错的 null 检查代码,同时提高了代码的可读性和可维护性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值