Skip to content

C# 10 新特性

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 的示例的功能规范。

你觉得这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度