上篇文章中给大家介绍了:
.NET 10 & C# 14 New Features 新增功能介绍-扩展成员Extension Members
今天继续给大家分享:Null 条件分配(Null-conditional assignment)
C# 14 中新增了一种语法能力:
允许在使用 ?. 时进行赋值操作
一、原有代码实现方案
obj?.Property = 10; // ❌ 编译错误
?. 只能用于访问或调用:
obj?.Method();
var x = obj?.Property;
不能用于赋值。
二、C# 14:允许 Null 条件赋值
现在可以直接这么写:
obj?.Property = 10;
等价于:
if (obj != null)
{
obj.Property = 10;
}
以这个代码示例:
receiver?.Member = value;
语义:
-
-
只对 receiver 进行一次求值
-
如果为 null,整个表达式直接结束
-
如果不为 null,则执行赋值
-
不会抛出 NullReferenceException
三、典型应用场景
简化防御式编程
原有:
if (user != null)
{
user.Name = "Tom";
}
现在:
user?.Name = "Tom";
结合链式调用
order?.Customer?.Address = newAddress;
等价于:
if (order?.Customer != null)
{
order.Customer.Address = newAddress;
}
四、与 ??= 的区别
??= 是"空值合并赋值"
obj ??= new MyClass();
如果 obj 是 null,则赋新值。
?. 赋值是"存在才赋值"
obj?.Property = value;
如果 obj 不为 null,才执行赋值。

五、性能分析
✔ 没有额外性能损耗
✔ 与手写 null 判断几乎一致
✔ JIT 会优化
对高频代码路径安全。
周国庆
20260220