如何减少多个嵌套的foreach块
我有以下情况:
var Ids = object1.GetIds(); // returns IEnumerable foreach (var id in Ids) { foreach (var relatedObject in object1.GetRelatedObjects(id)) { // Do Something with related object } }
在这种情况下,我想摆脱第一个foreach并将这个逻辑减少为单个foreach。 我怎么能做到这一点?
LINQ表达式是否可以使用类似的方法?
当两个循环之间没有任何内容时,在嵌套的循环之前或之后,您可以使用SelectMany
将两个循环“展平”为一个循环:
foreach (var relatedObject in Ids.SelectMany(object1.GetRelatedObjects)) { ... }
这个循环和循环之间的一个主要区别是id
不再在范围内。 假设relatedObject
公开了一个公共Id
属性,这在你的情况下应该不是问题,因为你可以用
var id = relatedObject.Id;
我个人喜欢充分利用foreach
循环的可选支撑/块。
你无法降低复杂性。 但你可以让它看起来更好
IEnumerable Ids = object1.GetIds() foreach (var id in Ids) foreach (var relatedObject in object1.GetRelatedObjects(id)) { DoSomething(relatedObject); }