【问题标题】:Instantiating a List实例化列表
【发布时间】:2017-05-16 17:00:27
【问题描述】:

如果我想实例化一个数组,语法是

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

【问题讨论】:

标签: c# arrays list instance


【解决方案1】:

语法

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

数组初始化的特殊语法糖。 {1,2,3} 本身还不是一个数组。

这一行

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

之所以有效,是因为 表达式 new[] {1,2,3} 返回一个 int[],它实现了 IEnumerable&lt;int&gt;,因此您可以在其上调用 ToList()

在规范中,12.6 Array initializers7.5.10.2 Array creation expressions 之间的区别。


List&lt;T&gt; 有一个构造函数,它以IEnumerable&lt;T&gt; 作为参数来初始化列表的内容。所以你可以打电话

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;

【讨论】:

    猜你喜欢
    • 2020-02-07
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    相关资源
    最近更新 更多