如果我想实例化数组,则语法为
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 :(得分: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 initializers和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;