实例化列表

时间:2017-01-02 15:21:27

标签: c# arrays list instance

如果我想实例化数组,则语法为

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

1 个答案:

答案 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 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;