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现在这是一个完全不同的画面!等一下,我拿错了,我刚修好。很抱歉。