返回

C# 15 新语法全面解析:最新特性、代码示例与完整使用教程

2026-07-21 C# C#15 6 0

C# 作为 .NET 平台的核心开发语言,一直保持着快速迭代。从 C# 8 引入异步流、模式匹配增强,到 C# 10 的全局 using、文件范围命名空间,再到 C# 12 的主构造函数和集合表达式,C# 不断向现代化、高效率方向发展。

C# 15 作为下一代语言版本,目前主要面向 .NET 11 Preview 环境,带来了多个期待已久的新能力,包括集合表达式增强、Union 类型、Closed 类型层级以及内存安全模型优化等。

本文将详细介绍 C# 15 新语法,并结合实际代码展示如何使用这些新特性。

C# 15 开发环境准备

目前 C# 15 需要使用支持预览版本的开发环境,例如 Visual Studio 2026 Insider 或 .NET 11 Preview SDK。

创建项目后,可以通过项目文件开启 Preview 语言版本:

<PropertyGroup>
    <LangVersion>preview</LangVersion>
</PropertyGroup>

然后即可体验 C# 15 最新语法。

需要注意的是,C# 15 当前仍处于演进阶段,部分功能可能随着后续 Preview 版本调整。

一、集合表达式参数(Collection Expression Arguments)

C# 12 引入了集合表达式:

var numbers = [1, 2, 3, 4];

这种写法大幅简化了数组、List 等集合初始化。

C# 15 对集合表达式进行了增强,允许在集合表达式中直接向底层集合构造函数传递参数。

新的语法通过 with(...) 实现。

例如:

List<string> names =
[
    with(capacity: 100),
    "Tom",
    "Jack",
    "Lucy"
];

这里的 capacity 会传递给 List 构造函数。

以前我们需要这样写:

var names = new List<string>(100)
{
    "Tom",
    "Jack",
    "Lucy"
};

C# 15 后可以保持集合表达式的简洁写法。

除了容量设置,还可以传递比较器:

HashSet<string> users =
[
    with(StringComparer.OrdinalIgnoreCase),
    "Admin",
    "ADMIN",
    "admin"
];

由于使用了忽略大小写比较器,最终集合中只会保存一个元素。

这种设计特别适合处理:

  • 字符串集合初始化
  • 自定义比较规则
  • 高性能集合创建

集合表达式参数让 C# 的集合初始化语法更加接近真实构造需求。

二、Union 联合类型(Union Types)

Union 类型是 C# 15 最受关注的新功能之一。

在以前的 C# 开发中,如果一个方法可能返回多个类型,通常会使用:

object result;

例如:

object GetResult()
{
    return new User();
}

但是 object 存在明显问题:

  • 类型不明确
  • 需要手动判断类型
  • 容易出现运行时错误

C# 15 引入 union 关键字,可以声明一个只能属于指定类型之一的联合类型。

例如:

public record User(string Name);

public record Error(string Message);

public union Result(User, Error);

表示 Result 只能是 User 或 Error。

Union 类型结合模式匹配

使用 Union 类型:

Result result = new User("Tom");

string message = result switch
{
    User user => user.Name,
    Error error => error.Message
};

编译器能够知道所有可能类型。

相比传统 object:

if(result is User user)
{

}
else if(result is Error error)
{

}

代码更加安全,也减少遗漏判断。

Union 类型适合哪些场景?

Union 特别适合:

  • 接口返回结果:Success | Failed
  • 业务状态:OrderCreated | OrderCancelled
  • 领域模型:Email | Phone | Address

它类似其他语言中的 Discriminated Union,让 C# 在领域驱动设计中更加方便。

三、Closed 封闭继承层级

C# 15 引入了 closed 修饰符,用于限制继承范围。

以前:

abstract class Shape
{

}

任何程序集都可以继承:

class Circle : Shape
{

}

这会导致编译器无法知道所有派生类型。

C# 15:

public closed record class Status;

public record Success : Status;

public record Failed : Status;

表示 Status 的直接子类只能在当前程序集定义。

Closed 类型结合 Switch

由于编译器知道所有可能类型:

string GetStatus(Status status)
{
    return status switch
    {
        Success => "成功",
        Failed => "失败"
    };
}

不需要 default => "未知",因为所有情况已经覆盖。

这种设计非常适合:

  • 状态机
  • API 返回状态
  • 业务流程模型
  • 枚举替代方案

四、内存安全改进(Memory Safety)

C# 长期支持 unsafe 指针操作:

unsafe
{
    int* p;
}

但是 unsafe 范围较大,代码审查时很难快速定位真正危险的位置。

C# 15 开始优化 unsafe 模型,希望让危险操作更加明确。

新的设计目标:

  • 缩小 unsafe 影响范围
  • 标记真正访问非托管内存的位置
  • 提升代码安全审计能力

例如:

int value = 10;

int* pointer = &value;

部分指针声明操作可以减少 unsafe 限制。

但是:

*p = 20;

这种真正访问内存的操作仍然需要安全控制。

C# 15 的内存安全改进主要针对:

  • 高性能计算
  • 游戏开发
  • Native 调用
  • 系统级编程

C# 15 新语法实际应用建议

对于普通 ASP.NET Core、Web API、企业后台开发者来说,最值得关注的是 Union 类型,它可以明显改善 API 返回模型:

以前:

object response;

现在:

ApiResult(User, Error)

代码更加明确。

对于基础框架开发者:集合表达式参数可以减少重复代码。

例如:

new List<T>(capacity)

可以统一成:

[
    with(capacity)
]

对于游戏开发、底层开发:内存安全改进会让 unsafe 代码更容易维护。

总结

C# 15 并不是一次简单的语法升级,而是在类型系统、安全性以及开发体验方面的重要演进。其中最值得关注的是 Union 联合类型,它解决了 C# 长期以来多类型返回表达能力不足的问题。Closed 类型层级增强了模式匹配能力。集合表达式参数进一步完善了现代集合初始化体验。

随着 .NET 11 的发展,C# 15 将成为未来几年 .NET 开发的重要基础。对于正在学习 C#、ASP.NET Core 或准备升级项目的开发者来说,提前掌握这些新语法,可以更好地适应下一代 .NET 开发模式。

顶部