Skip to content

C# 15 新特性

更新: 2026-06-29 16:39:57   字数: 0 字   时长: 0 分钟

2026 年 3 月 25 日 C# 15 正式发布

一、三大核心语法重磅新特性

1. Union Types 联合类型(C#15 最标志性功能)

C# 原生自带判别式联合类型,对标 F# Discriminated Union,彻底替代手动基类+子类多态、object 装箱、OneOf 第三方库方案。

语法定义

csharp
union Result<T>
{
    Success(T Value);
    Error(string Message, int Code);
    Empty;
}

核心能力

  1. 模式匹配天然支持switch / is / 解构直接匹配分支,编译器全覆盖穷尽检查,漏分支编译报错;
  2. 轻量化存储:底层带标签值容器,无多态虚表开销,值类型语义、GC 压力极低;
  3. 解构访问:可直接提取分支字段:
    csharp
    var res = Result<int>.Success(200);
    if(res is Success(var data)) Console.WriteLine(data);
  4. IDE 完整支持:Preview3 补齐智能提示、重构、跳转、诊断;预览期需临时 Polyfill UnionAttribute / IUnion,正式版内置框架支持。

适用场景

接口返回结果、事件状态、消息结构体、多类型参数、错误处理,彻底消除大量样板子类代码。

2. Collection Expression Arguments 集合表达式 with 参数扩展

C#12 推出集合字面量 [],C#15 新增首元素 with(...) 传递集合构造函数参数,无需先 newAdd,一行完成容量、比较器、配置初始化。

示例

csharp
// 指定预分配容量,减少扩容GC
List<string> list = [with(capacity: 100), "a", "b", "c"];

// HashSet 直接传入忽略大小写比较器
HashSet<string> hs = [with(StringComparer.OrdinalIgnoreCase), "A", "a"];

// 配合扩展切片
var source = new[] { "x", "y" };
List<string> data = [with(capacity: source.Length * 2), ..source, "z"];

优势

  • 统一集合初始化语法,合并构造参数+元素填充;
  • 性能友好:提前指定容量规避多次数组复制;
  • 兼容所有带对应构造函数的标准集合(List<T>, HashSet<T>, Dictionary<TKey,TValue> 等)。

3. Closed Hierarchies 封闭类型层级(完善子类控制)

扩展 sealed/abstract,显式声明所有派生类只能定义在当前文件内,配合 Union 类型、模式匹配协同工作。

csharp
closed abstract class Message
{
    class Text(string Content) : Message;
    class Binary(byte[] Data) : Message;
}

编译器强制:外部程序集/文件无法新增子类,switch 模式匹配可自动判定穷尽,不需要 _ 默认分支;多用于领域固定枚举式对象模型。

二、编译器 & Roslyn 编译增强

  1. 穷尽匹配诊断强化 Union + Closed Hierarchy 双重校验,未覆盖全部分支直接编译错误,杜绝遗漏业务分支导致运行时异常。
  2. 布局扩展元数据(Extended Layout Support) 底层互操作增强,支持手动精细控制 struct 内存布局、偏移、对齐,面向 Native AOT、跨平台互操作、底层高性能组件开发优化。
  3. 代码分析器优化 CA1873 等性能分析器降噪,提示更精准;新增 Union 类型、集合表达式专用静态检查规则。

三、配套 .NET 11 运行时协同语言能力(和 C#15 深度绑定)

1. Runtime Async 运行时原生异步(无需预览开关)

C# async 底层重构:不再完全依赖编译器生成状态机,CoreCLR 运行时原生调度异步暂停/恢复。

  • 异步方法开销大幅下降,栈追踪更干净;
  • Native AOT 完整支持;
  • .NET11 目标项目默认启用,不再需要 <EnablePreviewFeatures>true

    不属于 C#语法,但 C# async/await 执行模型完全受益此更新。

2. 泛型、Json、标准库配套语言适配

  1. System.Text.Json 原生支持序列化 Union 联合类型,新增 JsonNamingPolicy.PascalCase
  2. 集合 API 适配 with 表达式,所有标准集合增加兼容构造入口;
  3. 新增 BFloat16 半精度浮点类型,C# 直接字面量与运算支持,面向 AI 数值计算场景。

四、性能与开发体验收益总览

  1. 代码精简 Union 替代多子类/OneOf;集合 with 消除先 new 再填充的多行样板;Closed Hierarchy 简化固定领域模型。
  2. 运行性能提升 Union 无虚表、集合预分配容量、Runtime Async 降低异步开销、JIT 新增 switch 折叠/边界消除优化。
  3. 编译期安全 穷尽模式匹配、封闭层级限制外部派生,大量运行时异常前置为编译报错。
  4. 统一语法范式 集合字面量完整闭环,初始化逻辑统一写在 [] 内部,代码可读性大幅提升。

五、当前预览版使用限制

  1. Union 类型:Preview 阶段需手动添加 UnionAttributeIUnion polyfill,正式版移入 System.Runtime.CompilerServices 内置;
  2. 需安装 .NET 11 Preview SDK + Visual Studio 2026 Insider;
  3. 项目语言版本设置 <LangVersion>preview</LangVersion>
你觉得这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度