为何在Visual Studio Code的这段C#代码中无需using System指令?
为什么未添加using指令也能直接使用System.Console和List?
关于using指令的官方文档指出:
using指令允许你使用命名空间中定义的类型,而无需指定该类型的完全限定命名空间。
我原本的理解是,要使用System.Console只有两种方式:
- 在代码中添加
using System;指令,这样就能直接用Console指代System.Console; - 使用完全限定名,直接写成
System.Console。
但我在Visual Studio Code里写了这段C#代码,既没加using System;也没写完全限定名,却能正常运行:
Console.WriteLine("Hello World!"); List<String> names = ["Alice", "Bob", "Eve"]; foreach (String name in names) { Console.WriteLine($"Hello {name}!"); }
注:
Console属于System命名空间List属于System.Collections.Generic命名空间
代码运行后控制台输出正常:
Hello World! Hello Alice! Hello Bob! Hello Eve!
请问这是为什么?
这是因为C# 10及更高版本引入了「隐式using」功能,针对控制台、类库等常见项目模板,.NET SDK会自动帮你添加一系列常用命名空间的全局using指令,无需手动在代码文件中声明。
具体来说:
- SDK会自动生成包含
global using System;、global using System.Collections.Generic;这类全局using的代码文件,这些指令对整个项目的所有代码文件生效,所以你能直接用Console、List这些类型。 - 你可以在项目的
obj目录下找到GeneratedFiles文件夹,里面的ImplicitUsings.g.cs文件就能看到这些自动生成的全局using指令。 - 这个功能默认是开启的,如果你想关闭,可以在项目文件(.csproj)里把
<ImplicitUsings>enable</ImplicitUsings>改成<ImplicitUsings>disable</ImplicitUsings>,之后就需要手动添加using指令才能使用非完全限定名的类型了。
内容的提问来源于stack exchange,提问作者joseville
相关产品推荐
相关产品推荐

