我有5个列表,其中包含相同的对象。我只是想将它们全部与完整的属性组合成一个更大的列表。
我想到了一种方法,但我认为有更好的方法。
List<object> blah = new List<object>
foreach(object item in ObjectList1)
{
blah.Add(item);
}
如果您知道更好的方法,请告诉我,提前致谢!
答案 0 :(得分:5)
您可以使用List<T>.AddRange()
或Linq:
foreach(var list in myLists)
bigList.AddRange(list);
答案 1 :(得分:4)
List<object> blah = ObjectList1
.Concat(ObjectList2)
.Concat(ObjectList3)
// ...
.ToList();
答案 2 :(得分:3)
这个功能......
static IEnumerable<T> Combine<T>(params IEnumerable<T>[] sources) {
return sources.SelectMany(s => s);
}
...可以像这样使用:
List<object> l1 = ... ;
List<object> l2 = ... ;
List<object> l3 = ... ;
List<object> l4 = ... ;
List<object> l5 = ... ;
var result = Combine(l1, l2, l3, l4, l5).ToList();
BTW,如果结果实际上不需要是ToList
,则省略List
。
(这当然适用于任何数量的列表,而不仅仅是5个。)
或者,如果你只需要做一次而不想仅为此引入一个全新的功能:
var result = new[] { l1, l2, l3, l4, l5 }.SelectMany(l => l).ToList();
或者,如果您关心的是性能而不是可读性,请执行此操作以避免在列表调整大小上重新分配内存:
var result = new List<object>(l1.Count + l2.Count + l3.Count + l4.Count + l5.Count);
result.AddRange(l1);
result.AddRange(l2);
result.AddRange(l3);
result.AddRange(l4);
result.AddRange(l5);
答案 3 :(得分:2)
var result = ObjectList1.Concat(ObjectList2).Concat(ObjectList3).
Concat(ObjectList4).Concat(ObjectList5).ToList()
答案 4 :(得分:2)
您的问题代码:
List<object> blah = new List<object>
foreach(object item in ObjectList1)
{
blah.Add(item);
}
...如果您使用AddRange
:
List<object> blah = new List<object>
blah.AddRange(ObjectList1);
因此,您可以调用AddRange 5次或连接5个列表并将结果传递给AddRange。
目前尚不清楚“所有属性是否完整”究竟是什么意思,但如果这意味着您的其他列表是不同更多特定类型的列表而不是 object
,然后不,你不能创建一个列表,它将为你提供对列表成员的强类型访问。
修改强>
似乎“所有属性都保持不变”意味着新列表中的对象将具有与旧列表中的对象相同的属性值。当然,他们会,因为它们是相同的对象!列表实际上并不包含对象,毕竟它们包含对象的引用(因为{{ 1}}是引用类型)。新列表包含引用的副本,而不是对象的副本。
答案 5 :(得分:1)
尝试
ObjectList1.Concat(ObjectList2).Concat(ObjectList3).Concat(ObjectList4).Concat(ObjectList5).ToList()`
答案 6 :(得分:1)
我不知道你在这里要做什么。也许您应该将对象强制转换为特定对象。代码对我来说是正确的,但这有点奇怪。
答案 7 :(得分:1)
为了便于阅读,我建议......
List<object> blah = new List<object>
blah.AddRange(ObjectList1);
blah.AddRange(ObjectList2);
blah.AddRange(ObjectList3);
blah.AddRange(ObjectList4);