【发布时间】:2016-10-29 06:21:03
【问题描述】:
用默认值(T 类型)初始化List<T> 的方法之一是
List<int> foo = new List<int>(new int[5]);
这将创建一个包含 5 个零的列表。 List<List<T>> 你会怎么做?
我知道我们可以使用 for 循环或使用 Enumerate.Repeat 来做到这一点(但这会创建一个深层副本),但想知道它是否可以像上面那样完成?
【问题讨论】:
-
new List<T>(new List<T>())或new List<T>(new List<T>(default(T)))? -
var foo = new List<int>(Enumerable.Range(1, 5).Select(i => new List<int>());将5替换为您想要的任意多个内部列表。 -
您的示例调用this constructor。这有效:
var a = new List<List<int>>(new List<int>[5]);,但显然您需要迭代 5 个元素并实例化每个列表。没有像这样的任何其他constructors,意思是不,我没有看到初始化嵌套列表的默认方法。请注意,Enumerable.Repeat或.Select或等效项中基本上隐藏了 for 循环,也就是说,您在语法上可能会隐藏循环,但它仍然存在。 -
List
的默认值为 null。所以 new List - >(new List
[5]) 将使用默认值(nulls)。如果要创建新列表,可以尝试 new List - >(new List
[] { new T[5].ToList(), new T[5].ToList() })跨度>
标签: c#