迭代列表列表?

eri*_*200 9 c# silverlight functional-programming list

我有来自某个来源的物品(来自其他地方):

public class ItemsFromSource{
    public ItemsFromSource(string name){
        this.SourceName = name;
        Items = new List<IItem>();
    }

    public string SourceName;
    public List<IItem> Items;
}
Run Code Online (Sandbox Code Playgroud)

现在在MyClass中,我有来自多个来源的项目(从其他地方填充):

public class MyClass{
    public MyClass(){
    }

    public List<ItemsFromSource> BunchOfItems;
}
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以一次遍历BunchOfItems中所有ItemsFromSources中的所有Items?即,像:

foreach(IItem i in BunchOfItems.AllItems()){
    // do something with i
}
Run Code Online (Sandbox Code Playgroud)

而不是做

foreach(ItemsFromSource ifs in BunchOffItems){
    foreach(IItem i in ifs){
        //do something with i
    }
}
Run Code Online (Sandbox Code Playgroud)

Dar*_*rio 16

那么,您可以使用linq函数SelectMany进行flatmap(创建子列表并将它们压缩成一个)的值:

foreach(var i in BunchOfItems.SelectMany(k => k.Items)) {}
Run Code Online (Sandbox Code Playgroud)


bru*_*nde 5

你可以使用SelectMany:

foreach(IItem i in BunchOffItems.SelectMany(s => s.Items)){
    // do something with i
}
Run Code Online (Sandbox Code Playgroud)