我想要实现:
foreach (ScheduleItem s in ScheduleItems)
{
foreach (IScheduleModule m in s.ScheduleModules)
{
yield return m;
}
}
Run Code Online (Sandbox Code Playgroud)
使用LINQ聚合,我不明白为什么
return ScheduleItems.Aggregate(new Collection<IScheduleModule>(), (x, o) => x.Union(o.ScheduleModules) as Collection<IScheduleModule>);
Run Code Online (Sandbox Code Playgroud)
返回null.
我没有使用嵌套foreach的问题,但我的直觉是使用聚合,我不明白为什么它不会产生相同的结果.
还有其他方法吗?在可读性和性能方面最好的是什么?
Jon*_*eet 10
你应该用SelectMany这个:
ScheduleItems.SelectMany(s => s.ScheduleModules)
Run Code Online (Sandbox Code Playgroud)
这与您初始嵌套的foreach循环完全匹配.它也等同于这个查询表达式:
from s in ScheduleItems
from m in s.ScheduleModules
select m
Run Code Online (Sandbox Code Playgroud)
(虽然这将使用略有不同的形式SelectMany).
至于为什么Aggregate不工作:你正在调用Union返回一个IEnumerable<T>,但后来as尝试将其转换为Collection<T>.结果Union将不是a Collection<T>,因此as运算符的结果为null.