为什么我可以在文件开头不写“using System.Collections.Generic;”的情况下使用C#列表?

3

看一下这个简单的C#程序:

using System;

namespace testProgram
{
    internal class Program
    {
        static void Main(string[] args)
        {
            List<string> list = new List<string>();
            list.Add("List element.");
            Console.WriteLine(list[0]);
        }
    }
}

输出:

List element.

你可以看到它使用了一个列表。我经常在网上看到,为了使用列表,我需要在文件开头添加"using System.Collections.Generic;"。然而,程序可以在没有这行代码的情况下运行,为什么?

这段代码在我的在线编译器上无法编译:error CS0246: 找不到类型或命名空间名称 'List <>'(是否缺少 using 指令或程序集引用?)。https://www.programiz.com/csharp-programming/online-compiler/ - Pac0
你使用哪个编译器/集成开发环境? - Pac0
@Pac0 我使用的是 Visual Studio Community 2022。 - SpaceChaton
1个回答

10

看看你的项目文件。我强烈地怀疑它会包括这个:

<ImplicitUsings>enable</ImplicitUsings>

ImplicitUsings 特性在此处描述

ImplicitUsings 属性可用于启用和禁用 C# 项目中的隐式 global using 指令,该项目针对 .NET 6 或更高版本和 C# 10 或更高版本。当启用该特性时,.NET SDK 根据项目 SDK 的类型添加一组默认命名空间的 global using 指令。将此属性设置为 trueenable 以启用隐式 global using 指令。要禁用隐式 global using 指令,请删除该属性或将其设置为 falsedisable

请注意,这意味着您也不需要 using System;

结合顶级语句,您的整个文件实际上可以是:

List<string> list = new List<string>();
list.Add("List element.");
Console.WriteLine(list[0]);

或者如果命名空间对您很重要:

namespace testProgram;

List<string> list = new List<string>();
list.Add("List element.");
Console.WriteLine(list[0]);

是的,这行代码在我的项目文件中。 - SpaceChaton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接