惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 司徒正美
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
美团技术团队
WordPress大学
WordPress大学
罗磊的独立博客
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
爱范儿
爱范儿
MongoDB | Blog
MongoDB | Blog
J
Java Code Geeks
H
Hackread – Cybersecurity News, Data Breaches, AI and More
H
Help Net Security
S
SegmentFault 最新的问题
C
Check Point Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
腾讯CDC
Engineering at Meta
Engineering at Meta
The GitHub Blog
The GitHub Blog
F
Fortinet All Blogs
D
DataBreaches.Net
雷峰网
雷峰网
GbyAI
GbyAI
宝玉的分享
宝玉的分享

博客园 - Eric zhou

Github Project-AI Agentic Framework (.NET) 我不是给 AI 装了一堆插件,我是在搭一套工作能力系统 我不是在用 AI 助手,我在把自己的能力沉淀成组织资产 .NET 10 新特性概览与相关文章索引 .NET 10 & C# 14 New Features 新增功能介绍-ASP.NET Core 基于Microsoft.Extensions.AI 和 Microsoft.Extensions.VectorData构建向量搜索 Windows 安装 OpenClaw 踩坑全记录:Node、Git、CMake、VS Build Tools 一次解决 .NET 10 & C# 14 New Features 新增功能介绍-.NET CLI工具改进 .NET 10 & C# 14 New Features 新增功能介绍-再看Top Level Program .NET 10 & C# 14 New Features 新增功能介绍-带修饰符的简单 lambda 参数 .NET 10 & C# 14 New Features 新增功能介绍-field关键字 .NET 10 & C# 14 New Features 新增功能介绍-扩展成员Extension Members 基于.NET和C#构建光伏IoT物模型方案 总结归纳.NET 10 中 Minimal APIs 主要应用场景 .NET 10 New feature 新增功能介绍-Minimal APIs增强 .NET 10 New feature 新增功能介绍-WebSocket功能增强 Google A2UI本地部署记录 .NET10 New feature 新增功能介绍-类库新增功能 关于Agentic AI的一些总结和思考 .NET10 New feature 新增功能介绍-JIT编译器改进
.NET 10 & C# 14 New Features 新增功能介绍-Null 条件分...
Eric zhou · 2026-02-24 · via 博客园 - Eric zhou

上篇文章中给大家介绍了:

今天继续给大家分享: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;

语义: 

    1. 只对 receiver 进行一次求值

    2. 如果为 null,整个表达式直接结束

    3. 如果不为 null,则执行赋值

 不会抛出 NullReferenceException

三、典型应用场景

 简化防御式编程

 原有:

if (user != null)
{
user.Name = "Tom";
}

现在:

user?.Name = "Tom";

 结合链式调用

 order?.Customer?.Address = newAddress;

 等价于:

 if (order?.Customer != null)

 {
    order.Customer.Address = newAddress;
 }

 四、与 ??= 的区别

  ??=是“空值合并赋值”

如果 obj 是 null,则赋新值。

 ?.赋值是“存在才赋值”

如果 obj 不为 null,才执行赋值。

image

 五、性能分析

✔ 没有额外性能损耗

✔ 与手写 null 判断几乎一致

✔ JIT 会优化

对高频代码路径安全。

 周国庆

 20260220