我有一个5个列表,其中有相同的对象。我只是想将它们全部与那些属性完好地结合到一个更大的列表中。将5个列表<object>合并成一个列表<object>
我想到了一个办法,但我认为有更好的办法。
List<object> blah = new List<object>
foreach(object item in ObjectList1)
{
blah.Add(item);
}
如果你知道更好的方法来做到这一点让我知道,在此先感谢!
我有一个5个列表,其中有相同的对象。我只是想将它们全部与那些属性完好地结合到一个更大的列表中。将5个列表<object>合并成一个列表<object>
我想到了一个办法,但我认为有更好的办法。
List<object> blah = new List<object>
foreach(object item in ObjectList1)
{
blah.Add(item);
}
如果你知道更好的方法来做到这一点让我知道,在此先感谢!
var result = ObjectList1.Concat(ObjectList2).Concat(ObjectList3).
Concat(ObjectList4).Concat(ObjectList5).ToList()
我认为所有的答案都很好,但这是我最后使用的那个。我投了所有其他答案=)〜 – rreeves 2012-02-15 22:16:47
这个答案与我的有什么不同? – 2012-02-16 02:58:09
尝试
ObjectList1.Concat(ObjectList2).Concat(ObjectList3).Concat(ObjectList4).Concat(ObjectList5).ToList()`
你可以使用任何List<T>.AddRange()
或LINQ:
foreach(var list in myLists)
bigList.AddRange(list);
如果OP已经有一个列表集合,他可以简单地:'myLists.SelectMany(l => l)'。我的理解是他拥有不同的变量来保存列表。 – 2012-02-15 18:25:27
List<object> blah = ObjectList1
.Concat(ObjectList2)
.Concat(ObjectList3)
// ...
.ToList();
我不知道你在这里做什么。也许你应该将对象投射到特定的对象上。该代码看起来对我来说是正确的,但它有点奇怪。
为了提高可读性,我建议......
List<object> blah = new List<object>
blah.AddRange(ObjectList1);
blah.AddRange(ObjectList2);
blah.AddRange(ObjectList3);
blah.AddRange(ObjectList4);
此代码从你的问题:
:如果您使用AddRange
List<object> blah = new List<object>
foreach(object item in ObjectList1)
{
blah.Add(item);
}
...可能是更简洁
List<object> blah = new List<object>
blah.AddRange(ObjectList1);
所以你可以加CA将AddRange添加5次或者将5个列表连接并将结果传递给AddRange。
目前尚不清楚你所说的“他们的所有属性不变”的意思是什么,但如果它意味着你的其他名单不同更具体的类型列表比object
,则没有,你不能创建单个列表,这将使您能够对列表成员进行强类型访问。
编辑
看来,“他们所有的性质不变”是指,在新的列表中的对象具有相同的属性值在旧列表中的对象。当然他们会,因为他们是相同的对象!该列表并不包含对象,毕竟它们包含引用(因为object
是引用类型)。新列表包含副本的引用,而不是对象的副本。
此功能...
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();
或者,如果你关心性能超过可读性,这样做是为了AVO内存重新分配列表大小调整:
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);
Whice .net框架? – 2012-02-15 18:02:46
.NET中必须存在一些库,例如Java中的Guava,它可以在不实际创建新列表的情况下呈现聚合视图? – 2012-02-15 18:04:31
“所有属性完好无损”是什么意思? – phoog 2012-02-15 18:07:40