我要迭代3个(编辑)互斥的 IEnumerable。我想做这样的事情:
IEnumerable<Car> redCars = GetRedCars();
IEnumerable<Car> greenCars = GetGreenCars();
IEnumerable<Car> blueCars = GetBlueCars();
foreach(Car c in (redCars + greenCars + blueCars)) {
c.DoSomething();
}
...
我能想到的最好方法是:
...
List<Car> allCars = new List();
allCars.AddRange(redCars);
allCars.AddRange(greenCars);
allCars.AddRange(blueCars);
foreach(car in allCars) {
...
}
...
有没有更简洁的方法可以做到这一点?似乎像绑定(bind)IEnumberables一样琐碎。
最佳答案
使用LINQ:
foreach(car in redCars.Concat(greenCars).Concat(blueCars)) {
//...
}
对于信息,
Union
和Concat
之间的区别在于Union
将做额外的工作以确保唯一性。因此,如果您不希望重复(或者不介意),则Concat
会更快。