2017-01-02 91 views
0

如果我要實例化一個數組的語法是實例化一個列表

int[] items = new int[] { 1, 2, 3 }; 

和快捷是

int[] items = {1,2,3}; 

現在我想要做同樣的List

問:

爲什麼這項工作:

List<int> items = new int[] { 1, 2, 3 }.ToList(); 

但不是這樣的:

List<int> items = { 1, 2, 3 }; //invalid 

List<int> items = { 1, 2, 3 }.ToList(); //invalid 
+0

的可能的複製[如何初始化C#字符串列表(列表)與許多字符串值](http://stackoverflow.com/questions/3139118/how-to-initialize-ac-sharp- string-list-liststring-with-many-string-values) – ffguven

+1

@ffguven我不認爲它是重複的。問題不在於初始化列表,但_why_這些語法示例不起作用。 –

回答

2

的語法

int[] array = {1,2,3}; 

數組初始化特殊語法糖。 {1,2,3}本身並不是一個數組。

此行

List<int> list = new[] {1,2,3}.ToList(); 

作品,因爲表達new[] {1,2,3}返回一個int[],它實現IEnumerable<int>,所以你可以調用它ToList()

在規格是12.6 Array initializers7.5.10.2 Array creation expressions之間的差異。


List<T>有一個構造函數的IEnumerable<T>作爲參數初始化列表與內容。所以,你可以調用

List<int> list = new List<int>(new[]{1,2,3}); 

或使用集合初始化語法糖:

List<int> list = new List<int> {1,2,3}; 

這是由編譯器轉換爲這樣的事情:

var tmp = new List<int>(); 
tmp.Add(1); 
tmp.Add(2); 
tmp.Add(3); 
List<int> list = tmp;