首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >嵌套前台-需要在每个级别对对象进行操作。

嵌套前台-需要在每个级别对对象进行操作。
EN

Stack Overflow用户
提问于 2015-07-30 16:11:08
回答 1查看 73关注 0票数 0

我试图重构一些嵌套的foreach循环,但遇到了一个问题。这是原始代码:

代码语言:javascript
运行
复制
foreach(var doc in customTrackerDocuments)
{
    foreach(var rule in doc.Rules)
    {
        foreach(var eval in rule.Evaluations)
        {
            // Do something with customTrackerDocuments, rules, and evaluations
            // doc, rule, and eval are all available here
        }
    }
}

诚然,它是干净而直截了当的,所以也许它应该保持这样。然而,我一直试图降低复杂性和增加可读性,所以我尝试了以下几点:

代码语言:javascript
运行
复制
foreach(var eval in customTrackerDocuments.SelectMany(doc => doc.Rules).SelectMany(rule => rule.Evaluations))
{
    // Do something with customTrackerDocuments, rules, and evaluations
    // doc and rule are NOT available here
}

问题是,在循环中不再可以使用doc和规则。是否有一种方法可以让他们使用这种方法?还是我应该使用第一个选项,其中有三个嵌套循环?

我这里有个小提琴:https://dotnetfiddle.net/oBMfQC

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-30 16:18:19

它们是不可用的,因为您只是将rule.Evaluations投影到您的最终SelectMany中。您可以构建一个匿名类型:

代码语言:javascript
运行
复制
foreach(var eval in customTrackerDocuments.SelectMany(doc => doc.Rules, rule => new {doc, rule})
                                          .SelectMany(docrule => docrule.rule.Evaluations, eval => new {docrule.doc, docrule.rule, eval}))
{
    // eval.doc, eval,rule, eval.eval are available here
}

这是否更易读或不那么复杂是值得商榷的。当然,它不会更快,也不会占用更少的内存。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31728919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档