我有3 (Edit)互斥 IEnumerables我想迭代。我想要做这样的事情:forea覆盖IEnumerable的集合
...
List<Car> allCars = new List();
allCars.AddRange(redCars);
allCars.AddRange(greenCars);
allCars.AddRange(blueCars);
foreach(car in allCars) {
...
}
...
有没有一种更简洁的方式来做到这一点:
IEnumerable<Car> redCars = GetRedCars();
IEnumerable<Car> greenCars = GetGreenCars();
IEnumerable<Car> blueCars = GetBlueCars();
foreach(Car c in (redCars + greenCars + blueCars)) {
c.DoSomething();
}
...
我能想到的是最好的方法?看起来像组合IEnumberables应该是微不足道的。
呃......我从Concat开始,然后去了Union,然后决定我无法决定使用哪个,所以我删除了我的答案。无论如何,我喜欢你的解释差异。 +1 – Randolpho 2010-03-22 20:54:55
正是我在找的东西。谢谢! – sdr 2010-03-22 20:57:56
@sdr:请注意,这里存在时间/空间折衷。假设你没有三个而是二十个这样的列表,每个列表都有一万个元素。您的方法(将它们连接在一起形成一个大列表)需要大约20 x 10K额外引用,并需要20 x 10K参考复制操作。另一方面,20个天真连接占用零个额外引用,但嵌套连接的复制负担基于它们的嵌套深度,因此将会有10 x 11 x 10K = 110K份,而不是20K份。有关详细信息,请参阅http://blogs.msdn.com/wesdyer/archive/2007/03/23/all-about-iterators.aspx。 – 2010-03-22 22:42:49