C# 10
新特性
更新: 2023-12-08 12:20:48 字数: 0 字 时长: 0 分钟
2021 年 11 月, C# 10 正式发布
全局 using 指令
可将 global 修饰符添加到任何 using 指令,以指示编译器该指令适用于编译中的所有源文件。 这通常是项目中的所有源文件。
C#
global using System;
文件范围的命名空间声明
可使用 namespace 声明的新形式,声明所有后续声明都是已声明的命名空间的成员:
C#
namespace MyNamespace;
这个新语法为 namespace 声明节省了水平和垂直空间。
扩展属性模式
从 C# 10 开始,可引用属性模式中嵌套的属性或字段。 例如,窗体的模式
C#
{ Prop1.Prop2: pattern }
在 C# 10 及更高版本中有效,且其等效项
C#
{ Prop1: { Prop2: pattern } }
在 C# 8.0 及更高版本中有效。
改进型明确赋值
在 C# 10 及更低版本中,在许多情况下,明确赋值和 Null 状态分析都会生成误报警告。 这些通常涉及与布尔常量的比较,仅在 if 语句中的 true 或 false 语句以及 Null 合并表达式中使用变量。 这些示例会在早期版本的 C# 中生成警告,但在 C# 10 中不会:
C#
string representation = "N/A";
if ((c != null && c.GetDependentValue(out object obj)) == true)
{
representation = obj.ToString(); // undesired error
}
// Or, using ?.
if (c?.GetDependentValue(out object obj) == true)
{
representation = obj.ToString(); // undesired error
}
// Or, using ??
if (c?.GetDependentValue(out object obj) ?? false)
{
representation = obj.ToString(); // undesired error
}
增强型 #line pragma
C# 10 支持 #line pragma 的新格式。 你可能不会使用新格式,但你会看到它的作用。 这些增强功能支持使用 Razor 等域特定语言 (DSL) 实现更详细的输出。 Razor 引擎使用这些增强功能来改进调试体验。 你会发现调试器可以更准确地突出显示 Razor 源。 若要详细了解新语法,请参阅语言参考中有关预处理器指令的文章。 还可以阅读关于基于 Razor 的示例的功能规范。