隐式和全局导入名称空间

传统上,每个需要导入名称空间的.cs文件都必须首先使用using语句来导入这些名称空间。对于System和System.Linq这样的名称空间,几乎所有的.cs文件都需要,所以每个.cs文件的前几行通常至少有几个using语句,如下面的代码所示:

using System;
using System.Linq;
using System.Collections.Generic;


当使用ASP.NET Core创建网站和服务时,每个文件都需要导入几十个名称空间。
C# 10引入了一些简化名称空间导入的新特性。
首先,global using语句意味着指需要在一个.cs文件中导入一个名称空间,它将在所有.cs文件中都可用。可以把global using语句放到Program.cs文件中,但建议为这些语句创建一个单独的文件,命名为GlobalUsings.cs或GlobalNamespaces.cs,代码如下所示:

global using System;
global using System.Linq;
global using System.Collections.Generic;


其次,任何以.NET 6.0为目标并因此使用C# 10编译器的项目都会在.obj文件夹中生成一个.cs文件,以隐式的全局导入一些公共名称空间,比如System,隐式导入的名称空间的具体列表取决于面向的SDK。自动生成的隐式导入文件如下图所示。

选择项目,然后向项目文件中添加其他条目,以控制隐式导入哪些名称空间,如下图高亮显示的代码所示。

保存后,此时Vocabulary.GlobalUsings.g.cs文件现在导入System.Numerics,而非System.Threading,代码如下图所示。

另外,我们可以删除项目文件中的一个条目来禁用所有SDK的隐式导入名称空间特性,如下面的标记所示。