我在C#中有以下代码:
的IList <string
&GT; myList = null;
myList.Add(温度);
temp是一个在其他地方被decalred的字符串,并且不是null(我检查过它)。我在myList.Add(temp)行继续收到以下错误; “对象引用未初始化为对象的实例”
我在这里做错了什么???
更新问题:我已经尝试过新的
IList的<string
&GT; myList = new List <string
&gt;();
正如你们大多数人建议的那样,从Intellisense中获取以下内容:
无法创建抽象类或接口Systems.Collections.Generic.Ilist的实例。
感谢您之前的回答。现在我遇到了一个特殊的问题。我的datareader中有一个空字符串。 (sql server表中的1个字段为空。即string.Empty)。有没有办法摆脱读者内部的这种情况(我的意思是rdr在这里)??
答案 0 :(得分:4)
您需要先初始化列表:
IList<string> myList = new List<string>();
...
请注意,在=
的右侧,您必须写List<string>
而非IList<string>
,因为IList<string>
是一个界面,而List<string>
是一个类实现该接口。
答案 1 :(得分:1)
该行:
IList<string> myList = null;
没有给你一个列表,但是列表可以是一个空的引用。
IList<string> myList = new List<string>();
将正确实例化myList,因此您可以使用它(添加,删除等)。
答案 2 :(得分:0)
在这里,看一下本教程,以便更好地理解变量初始化。
来自http://www.csharphelp.com/2007/03/objects-classes-in-c/
Person Michael = new Person();
在第一行代码中,我们指定了整数变量called age。在第二行中,我们首先指定了我们需要创建的对象的类型,然后是对象的名称,后跟一个名为new的保留运算符,最后再输入类名,然后是“父级”(。)“。
让我们一步一步地理解它。在开头指定类名称告诉C#编译器为该类型分配内存位置(C#编译器知道类的所有变量和属性以及方法,因此它将分配适当的内存量)。然后我们按照我们想要的对象变量名来跟踪类名。代码的其余部分“= new Person();”调用对象的构造函数。我们稍后将讨论构造函数,但是现在理解构造函数是一种初始化对象变量的方法,而不是在创建它之后创建它。例如,我们在上一节中创建的Michaelobject可以编写如下:
Person Michael = new Person(20, “Brown”);
这里我在参数列表中指定了变量的值,因此我在创建对象时初始化了变量。但是对于这个代码工作,我们需要在Person类中指定构造函数,我不会在这里这样做,因为构造函数部分将在后面的文章中介绍。我想你有一个很好的关于类和对象的介绍,我将在下一篇文章中完成,我将讨论构造函数和构建块。我希望你从我的文章中得到一个新的东西。
答案 3 :(得分:0)
更新问题:我已经尝试过新的Ilist(),正如大多数人所建议的那样,从Intellisense中获取以下内容:无法创建抽象类或接口的实例Systems.Collections.Generic.Ilist
您无法创建接口的实例。的IList&LT; T&GT;是一个界面。就像其他人在这里所说的那样,你用一个继承接口的具体类的实例初始化它。注意他们如何使用新的List&lt; String&gt;()而不是新的IList&lt; String&gt;();
IList<String> items = new List<String>();