C# 这真的不是用C初始化列表的合法方法吗#

C# 这真的不是用C初始化列表的合法方法吗#,c#,list,C#,List,我正在尝试初始化一个字符串列表,以便在以后的方法中使用。我不知道列表需要多大,因为传递给程序的数据集大小不一致。因此,我将动态地将项目添加到列表中。但是,当我在上面的空白处初始化列表时,会被认为是main(),如下所示 List<string> studentData; studentData.AddRange(student); // Student is an array 我得到一个例外,说 System.NullReferenceException:'对象引用未设置为的实例

我正在尝试初始化一个字符串列表,以便在以后的方法中使用。我不知道列表需要多大,因为传递给程序的数据集大小不一致。因此,我将动态地将项目添加到列表中。但是,当我在上面的空白处初始化列表时,会被认为是
main()
,如下所示

List<string> studentData;
studentData.AddRange(student); // Student is an array
我得到一个例外,说

System.NullReferenceException:'对象引用未设置为的实例 对象的studentData为空

但在我之前的代码中,我调用了一个不同的列表,就像这样,它工作得很好

List<string> fileInput; // Holds comma delimited file text
.
. 
.
fileInput = text.Split(',').ToList();`
列出文件输入;//保存逗号分隔的文件文本
.
. 
.
fileInput=text.Split(',').ToList()`
然后我开始研究如何初始化一个非空列表。根据代码示例,这应该是有效的

List<string> studentData = new List<string>();
studentData.Add("Thing");
List studentData=new List();
studentData.Add(“Thing”);
但是
studentData
得到了带警告文本的绿色下划线

studentData从未分配给,并且始终具有其默认值 空

studentData.Add(“Thing”)以红色下划线显示错误文本

当前上下文中不存在名称“studentData.Add”。 当前上下文中不存在名称“studentData”

(“东西”)
也是分开处理的

应输入类型。
元组必须至少包含两个元素。 )预料之中。 类、结构或接口成员声明中的令牌“Thing”无效

我对C#还是相当陌生的,这些错误对我来说都没有意义。我做错了什么

List<string> studentData;

这将创建一个空列表并分配给
studentData

我也尝试过同样的方法,但没有遇到任何问题。请重新生成解决方案并再次检查

List<string> studentData = new List<string>();
studentData.Add("Thing");
List studentData=new List();
studentData.Add(“Thing”);
1)

当我在上面的空白处初始化列表时,会被视为main()如下所示

List<string> studentData;
studentData.AddRange(student); // Student is an array
列出学生数据;
在这种情况下,您只需声明变量,但尚未初始化它。没有为其指定值。因此,默认值是
null
,您会得到这个很好的异常

(二)

List studentData=新列表(); studentData.Add(“Thing”)

但学生数据被绿色下划线加上警告文字

当您在类级别上一次在方法范围外声明
studentData
,在方法内部一次在本地声明,并选择相同的名称时,会出现此错误! 因此编译器将倾向于使用局部变量并使用此引用。类级别上具有相同名称的变量(虽然名称相同,但实际上是另一个变量)将不会被使用,因此会显示绿线消息

(三)

当前上下文中不存在名称“studentData.Add”。当前上下文中不存在名称“studentData”

当编译器根本找不到
studentData
时,会出现此错误!这意味着您甚至没有在本地或类级别声明变量。(这里有一个提示:如果在控制台应用程序中在main之外声明它,则需要将变量
设置为static
或创建
程序的实例
,否则不能使用该变量,因为
main
static

编辑:

你发布的截图描绘了一幅稍有不同的画面。不幸的是,此错误消息具有误导性。实际上,编译器想告诉您不能在方法体之外执行像
Add(…)
这样的方法调用!这就是为什么你会得到

编译器现在尝试推断此语句的含义:

  • 它认为您正试图访问名为
    studentData.Add
    且未声明的变量
  • 它认为您正在尝试访问名为
    studentData
    的变量,该变量未声明
  • 它认为您正在尝试访问名为
    Add
    的变量,该变量未声明

在第一个示例中,您尝试从未初始化的对象调用方法,而在第二个示例中,您为未初始化的对象赋值,这就是dieference。您是否尝试过生成
studentData.AddRange(student)编码到
studentData.AddRange(student.ToString())?你试过下面@diberium的答案吗?我可以复制令牌和上下文not found消息,我在编辑中解释了这一点。但绿线对我来说是不可复制的。有时,您会对消息正确的较旧版本感到困惑,但现在您更改了代码,情况有所不同,但编译器仍然告诉您这种情况仍然存在。我真的不知道也不知道,我输入的代码与图片上方的块引号中提到的代码相同,图片显示了这一点。该错误在尝试运行后显示。无论如何,尽管您提供的解释和@diberium的回答让我比以前更进一步,但这消除了
NullReference
。我甚至没想过要试试。谢谢。您附加的图像不是我试图设置初始化的方式。我有
List studentData=newlist();studentData.Add(“Thing”)
在类级别中,并得到了该结果,但您的解释确实有意义。@rocky请发布一个屏幕截图,显示绿线,并显示“studentData从未分配给,且其默认值始终为空”。Message我在修复错误后返回并尝试以相同的方式放置该错误,但是它不再给绿线了…@rocky现在这是一个完全不同的画面!等一下,我拿错了,我刚修好。很抱歉。