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

问题描述 投票:0回答:3

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

List<string> studentData;

并在这样的公共方法中调用它,

studentData.AddRange(student); // Student is an array

我得到一个例外,说,

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

但是在我的代码中早些时候我调用了这样的初始化不同的列表并且它运行得很好,

List<string> fileInput; // Holds comma delimited file text
.
. 
.
fileInput = text.Split(',').ToList();`

然后我去DotNetPerls弄清楚如何初始化非空列表。根据代码示例,这应该有效,

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

但是studentData用绿色标有警告文字

studentData永远不会分配给,并且始终将其默认值设置为null。

studentData.Add("Thing");红色下划线,错误文字

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

("Thing")也分开处理。

预期类型。 元组必须包含至少两个元素。 )预期。类,结构或接口成员声明中的标记“Thing”无效

enter image description here

我仍然是C#的新手,这些错误对我来说都没有意义。我在这做错了什么?

c# list
3个回答
4
投票
List<string> studentData;

只需声明一个变量studentData,它的类型是List<string>,值是null

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

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


1
投票

我也试过了,我没有遇到任何问题。请重建解决方案并再次检查。

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

1
投票

1)

当我在上面的空格中初始化列表时,这将被视为main(),

List<string> studentData;

在这种情况下,您只需声明变量,但尚未初始化它。没有赋值给它。因此,默认值是null,你得到这个很好的例外。

2)

列出学生数据=新列表();学生Data.Add(“Thing”);

但是studentData用绿色下划线标出警告文字

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

code picture

3)

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

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

编辑:

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

编译器现在尝试使用此语句推断出您的意思:

  • 它认为您正在尝试访问名称为studentData.Add且未声明的变量。
  • 它认为您正在尝试访问名称为studentData且未声明的变量。
  • 它认为您正在尝试访问名称为Add且未声明的变量。
© www.soinside.com 2019 - 2024. All rights reserved.