为什么在C#中创建列表会导致此错误?

时间:2020-08-30 12:49:00

标签: c# list compiler-errors

尝试在C#中创建一个简单列表时,出现以下错误: “功能'顶级语句'当前处于预览状态,并且不受支持。要使用预览功能,请使用“预览”语言版本。 [5.1]'

此时,我输入的唯一代码是:

using System;
using System.Collections.Generic;

List<string> stringList = new List<string>();

为什么要直接使用C#的预览版,确定列表已经使用了一段时间了?

2 个答案:

答案 0 :(得分:2)

您不能只在顶层初始化变量,如果它是成员,则需要将其包含在类中。

using System;
using System.Collections.Generic;

public class Program
{
    List<string> stringList = new List<string>();
}

或者在方法内部(如果它是局部变量)

using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        List<string> stringList = new List<string>();
    }
}

答案 1 :(得分:1)

您收到的错误与列表无关,而与范围有关。所以答案

确定列表已经使用了一段时间了吗?

是确定的“是”。列表(或至少是数组)自C#诞生以来就存在,而泛型紧随C#2.0之后,而VS2005才开始支持列表(有关C#语言历史的更多信息,请参见https://docs.microsoft.com/dotnet/csharp/whats-new/csharp-version-history)。

但是,您的问题是您在课堂外有一个陈述。但是,类是OOP背后的非常基本的概念-一切都与类有关。以下内容(与列表无关)也将无效:

using System;
using System.Collections.Generic;

int i = 3;

如前所述,.NET中的所有内容都与类相关-没有“全局”这样的概念性内容。因此,您必须将语句移到一个类中:

using System;
using System.Collections.Generic;

class MyClass
{
    List<string> stringList = new List<string>();
}

这会将您的列表范围限制为MyClass的特定实例。您可以进一步将变量的范围限制为方法甚至方法中的特定范围。有关范围的更多信息,请阅读this

您收到的所有错误消息都与一个under discussion for C#9的新功能有关:

允许一系列语句在 编译单元的namespace_member_declarations(即源) 文件)。