是否可以用 linq 替换下面的 foreach 循环?
public class Foo
{
List<Bar> Bars {get; set;}
}
List<Foo> fooList = GetFooList();
List<Bar> allBars = new List<Bar>();
foreach (Foo foo in fooList)
{
allBars.AddRange(foo.Bars);
}
我得到的最接近的是:
var temp = fooList.Select(foo => foo.Bars).ToList();
给出一个 List<List<Bar>> .
请您参考如下方法:
您可以在 foo.Bars 上使用 SelectMany()
allBars.AddRange(fooList.SelectMany(foo => foo.Bars));
如果 allBars 变量在 AddRange() 之前不包含任何内容,您可以跳过对象创建:
List<Bar> allBars = fooList.SelectMany(foo => foo.Bars).ToList();
如果你不打算在其他地方使用 fooList,你可以这样写:
List<Bar> allBars = GetFooList().SelectMany(foo => foo.Bars).ToList();
