实例化列表
Instantiating a List
如果我想实例化一个数组,语法是
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
语法
int[] array = {1,2,3};
是数组初始化的特殊语法糖。 {1,2,3}
本身还不是一个数组。
这一行
List<int> list = new[] {1,2,3}.ToList();
之所以有效,是因为 表达式 new[] {1,2,3}
returns 一个 int[]
,它实现了 IEnumerable<int>
,因此您可以调用 ToList()
就可以了。
在规范中,这就是 12.6 Array initializers and 7.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;
如果我想实例化一个数组,语法是
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
语法
int[] array = {1,2,3};
是数组初始化的特殊语法糖。 {1,2,3}
本身还不是一个数组。
这一行
List<int> list = new[] {1,2,3}.ToList();
之所以有效,是因为 表达式 new[] {1,2,3}
returns 一个 int[]
,它实现了 IEnumerable<int>
,因此您可以调用 ToList()
就可以了。
在规范中,这就是 12.6 Array initializers and 7.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;