2012-01-27 131 views
1

我是c#,并且通过修改visual studio中的现有代码将程序放在一起。我正在寻找一些指导来理解创建列表的两种方式之间的区别。都编译:创建新列表的细微差异?

List <int> myList; 

//versus 

List <int> myList = new List <int>(); 

回答

8

这并不微妙。一个创建一个列表,一个不创建。

第一个只是声明对列表的引用。在使用之前,您必须稍后创建列表。

第二个声明对列表的引用并创建一个列表,并将引用设置为同时引用新列表。

+0

虽然这是真的,但我猜测@GIStack可以使用更多的帮助:第一条语句**声明**一个类型为“List ”的变量,而第二条语句声明**并创建**(或者实例,如果你愿意)类型的变量列表'' vlad 2012-01-27 20:31:57

+1

如果你使用的第一个,然后在后面的程序某些时候,你可能会使用这行:myList中=新名单();为了赋予变量一个值。但是你也可以说myList = cityList;其中cityList是另一个类型为List 的变量,在您的程序的其他地方声明和初始化。 – 2012-01-27 20:32:29

3

第一个List myList;简单地声明了可变,但该值是未分配的。第二个实际创建一个新的List对象,其中没有条目。

在大多数情况下,您应该使用第二个选项。

+1

如果它是一个局部变量,它不是'null',它是未分配的。 – svick 2012-01-27 20:32:41

+0

@svick它太空了,你可以在表达式中将它与null比较,它会返回true。 – 2012-01-27 20:34:16

+0

@ChuckSavage,不,你不能。如果你尝试编译类似'List list; bool isNull = list == null;',你会得到一个编译时错误。 – svick 2012-01-27 20:38:46

1

第一行只是创建一个变量来保存对列表的引用。

第二个初始化一个空列表refrence。

试图调用上的参考的任何方法/访问属性而不初始化它会在一个空指针异常

0
List <int> myList; 

最终是相同的写入

List <int> myList = null; // aka it is not a list yet 
+2

如果'myList'是一个局部变量,则不是这样。 – 2012-01-27 20:35:39

0

第一行没有按创建一个List<int>对象。它只声明一个名为myList的变量,其类型为List<int>。如果你试图用这个变量做任何事情,编译器会抱怨,因为它是未初始化的。

第二行声明该变量并将其初始化为一个值:一个新的List<int>对象。