c# - 如何减少多个嵌套的foreach块




linq code-review (2)

当两个循环之间没有任何内容时,在嵌套之前或之后,可以使用SelectMany将两个循环“变平”为一个:

foreach (var relatedObject in Ids.SelectMany(object1.GetRelatedObjects)) {
    ...
}

这个循环和你所拥有的循环之间的一个主要区别就是这个id不在范围之内。 假设relatedObject公开一个公共Id属性,这不应该是你的情况的一个问题,因为你可以提取id

var id = relatedObject.Id;

我有以下情况:

var Ids = object1.GetIds(); // returns IEnumerable<int>
foreach (var id in Ids)
{
    foreach (var relatedObject in object1.GetRelatedObjects(id))
    {
    // Do Something with related object
    }
}

在这种情况下,我想摆脱从第一foreach和减少这个逻辑到单一的foreach。 我怎么能做到这一点?

LINQ表达式应该可能有一些类似的方法吗?


我个人喜欢充分利用可选的大括号/块for foreach循环。

你不能减少复杂性。 但是,你可以让它看起来更好

IEnumerable<int> Ids = object1.GetIds()

foreach (var id in Ids)
foreach (var relatedObject in object1.GetRelatedObjects(id))
{
     DoSomething(relatedObject);
}






cyclomatic-complexity