在C#中,我有以下类型:
List<List<mytype>> MyLists;
List<mytype> MainList;
我想把所有List中的每个元素&lt;&gt;在MyList中,将它们放在MainList中。然后,MainList将仅具有由每个List&lt;&gt;内的所有元素组成的元素。 MyList的。我尝试了以下但是得到了一个关于无法推断出类型的错误:
MyLists.ForEach(list => MainList.AddRange(list.SelectMany(x => x != null)));
我不确定在SelectMany()中放入什么,因为我想要列表中的所有元素&lt;&gt;。这些要素不需要符合任何标准。
有关如何做到的任何建议吗?
答案 0 :(得分:4)
MainList.AddRange(from list in MyLists
from element in list
select element);
或者,如果您愿意,
MainList.AddRange(MyLists.SelectMany(list => list));
答案 1 :(得分:3)
这只需要一次SelectMany电话:
MainList = MyLists.SelectMany(l => l).ToList();
请注意,这不需要在此调用之前构造/初始化MainList,因为它已从ToList()
调用完全初始化。
编辑:
由于您确实包含null
项检查,因此如果您需要从列表中删除null
元素,则还可以添加该检查:
MainList = MyLists.SelectMany(l => l.Where(i => i != null)).ToList();
和/或过滤整个null
列表:
MainList = MyLists
.Where(l => l != null)
.SelectMany(l => l.Where(i => i != null))
.ToList();
此外,如果您想添加项目到MainList
,而不是让原始列表中的MainList
“只有元素”,则可以使用{{ 1}}仍然:
AddRange
答案 2 :(得分:0)
另一种选择,更接近原始尝试:MyLists.ForEach(list => MainList.AddRange(list));
换句话说,如果您使用ForEach和AddRange,则不需要SelectMany甚至Select。