C# 13 中的新增功能

C# 13 包括以下新增功能。 可以使用最新的 Visual Studio 2022 版本或 .NET 9 预览版 SDK 尝试这些功能。

.NET 9 支持 C# 13。 有关详细信息,请参阅 C# 语言版本控制

可以通过 .NET 下载页下载最新的 .NET 9 预览版 SDK。 还可以下载 Visual Studio 2022 预览版,其中包括 .NET 9 预览版 SDK。

当新功能在公共预览版中可用时,它们将被添加到“C# 中的新增功能”页。 roslyn 功能状态页工作集部分跟踪即将推出的功能何时合并到主分支中。

注意

我们有兴趣了解你对这些功能的反馈。 如果发现这些新功能存在问题,请在 dotnet/roslyn 存储库中创建新问题

新的转义序列

你可以使用 \e 作为 ESCAPE 字符 Unicode U+001B字符文本转义序列。 以前,你使用的是 \u001b\x1b。 不建议使用 \x1b,因为如果 1b 后面的下一个字符是有效的十六进制数字,则那些字符会成为转义序列的一部分。

方法组自然类型

此功能对涉及方法组的重载解析进行了少量优化。 编译器以前的行为是为方法组构造完整的候选方法集。 如果需要自然类型,则自然类型是根据整套候选方法确定的。

新行为是在每个作用域内削减候选方法集,移除那些不适用的候选方法。 通常情况下,这些是具有错误元数的泛型方法,或未被满足的约束。 仅当未找到候选方法时,此过程才会继续前进到下一个外层作用域。 此过程更紧密地遵循重载决策的一般算法。 如果在给定作用域内找到的所有候选方法都不匹配,则该方法组没有自然类型。

你可以在建议规范中阅读有关更改的详细信息。

隐式索引访问

对象初始值设定项表达式中现在允许隐式“从末尾开始”索引运算符 ^。 例如,你现在可以在对象初始值设定项中初始化数组,如以下代码所示:

var v = new S()
{
    buffer =
    {
        [^1] = 0,
        [^2] = 1,
        [^3] = 2,
        [^4] = 3,
        [^5] = 4,
        [^6] = 5,
        [^7] = 6,
        [^8] = 7,
        [^9] = 8,
        [^10] = 9
    }
};

在 C# 13 之前的版本中,不能在对象初始值设定项中使用 ^ 运算符。 你需要从前面开始为元素编制索引。

另请参阅