Foreach对IEnumerables的集合

sdr*_*sdr 8 c# ienumerable foreach

我有3个(编辑)互相排斥的 IEnumerables,我想迭代.我想做这样的事情:

IEnumerable<Car> redCars = GetRedCars();
IEnumerable<Car> greenCars = GetGreenCars();
IEnumerable<Car> blueCars = GetBlueCars();

foreach(Car c in (redCars + greenCars + blueCars)) {
    c.DoSomething();
}

...
Run Code Online (Sandbox Code Playgroud)

我能想到的最好的方法是:

...
List<Car> allCars = new List();
allCars.AddRange(redCars);
allCars.AddRange(greenCars);
allCars.AddRange(blueCars);
foreach(car in allCars) {
    ...
}
...
Run Code Online (Sandbox Code Playgroud)

有没有更简洁的方法来做到这一点?看起来像组合IEnumberables应该是微不足道的.

Mar*_*ell 20

使用LINQ:

foreach(car in redCars.Concat(greenCars).Concat(blueCars)) {
    //...
}
Run Code Online (Sandbox Code Playgroud)

对于信息,这里的差异之间UnionConcatUnion会做额外的工作来保证唯一性; 因此,如果您不期望重复(或者:不介意它们),那么Concat更快.

  • 嘿......我从Concat开始,然后去了Union,然后决定我无法决定使用哪个,所以我删除了我的答案.我喜欢你,无论如何更好地解释差异.+1 (2认同)