2012-01-27 33 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>對象。