You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何在Visual Studio Code的这段C#代码中无需using System指令?

为什么未添加using指令也能直接使用System.Console和List?

关于using指令的官方文档指出:

using指令允许你使用命名空间中定义的类型,而无需指定该类型的完全限定命名空间。

我原本的理解是,要使用System.Console只有两种方式:

  1. 在代码中添加using System;指令,这样就能直接用Console指代System.Console;
  2. 使用完全限定名,直接写成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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 13:54:51