我要迭代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)) {
    //...
}

对于信息,UnionConcat之间的区别在于Union将做额外的工作以确保唯一性。因此,如果您不希望重复(或者不介意),则Concat会更快。

10-08 16:15