C# 15 包含以下新功能。 使用最新的 Visual Studio 2026 内部预览版或 .NET 11 预览版 SDK 试用这些功能:
C# 15 是最新的 C# 预览版。 .NET 11 预览版支持 C# 15。 有关详细信息,请参阅 C# 语言版本控制。
可以从 .NET 下载页下载最新的 .NET 11 预览版 SDK。 还可以下载 Visual Studio 2026 内部预览版,其中包括 .NET 11 预览版 SDK。
“C# 中的新增功能”页面在公共预览版中可用时会添加新功能。 roslyn 功能状态页的工作集部分跟踪即将推出的功能何时合并到主分支中。
您可以在我们关于重大变更的文章中找到 C# 15 中引入的任何重大变更。
注释
我们对这些功能的反馈感兴趣。 如果发现上述任何新功能的问题,请在 dotnet/roslyn 存储库中创建一个新问题。
集合表达式参数
可以用 with(...) 元素作为集合表达式的第一个元素,将参数传递给底层集合的构造函数或工厂方法。 借助此功能,可以直接在集合表达式语法中指定容量、比较器或其他构造函数参数。
以下示例演示如何将容量参数传递给List<T>构造函数,以及传递比较器给HashSet<T>:
string[] values = ["one", "two", "three"];
// Pass capacity argument to List<T> constructor
List<string> names = [with(capacity: values.Length * 2), .. values];
// Pass comparer argument to HashSet<T> constructor
HashSet<string> set = [with(StringComparer.OrdinalIgnoreCase), "Hello", "HELLO", "hello"];
// set contains only one element because all strings are equal with OrdinalIgnoreCase
若要了解有关集合表达式参数的详细信息,请参阅有关集合表达式或特征规范的语言参考文章。 有关在集合初始值设定项中使用集合表达式参数的信息,请参阅 对象和集合初始值设定项。
联合类型
C# 15 引入了 联合类型,这些类型表示可以是多种 事例类型之一的值。 使用关键字 union 声明联合
public record class Cat(string Name);
public record class Dog(string Name);
public record class Bird(string Name);
public union Pet(Cat, Dog, Bird);
联合体提供每种情况类型的隐式转换,编译器确保 switch 表达式涵盖所有情况类型:
Pet pet = new Dog("Rex");
string name = pet switch
{
Dog d => d.Name,
Cat c => c.Name,
Bird b => b.Name,
};
联合类型首先出现在 .NET 11 预览版 2 中。 在早期 .NET 11 预览版中, UnionAttribute 运行时中不包含和 IUnion 接口,因此必须在项目中声明它们。 更高版本的 .NET 11 预览版包括这些运行时类型。 此外, 建议规范 中的一些功能尚未实施,包括 联合成员提供商。 这些功能将在未来预览版中推出。