【问题标题】:refactor IF...ELSE into Nested foreach to LINQ将 IF...ELSE 重构为嵌套的 foreach 到 LINQ
【发布时间】:2014-03-01 19:02:49
【问题描述】:

我很难找到将嵌套的 foreach 代码重构为 Linq 的方法,主要是因为它包含一个 IF-Else 子句。

以下是我的代码的简化版本。如何将 IF..Else 包含在 linq 语句中??

感谢您的建议。

List<hierarchy> PredomHierarchy;
List<hierarchy> RecesesHierarchy;

foreach x in PredomHierarchy{
foreach y in RecesesHierarchy{  

  if(x.name = y.name){      
    Dosomething(x.name, y.name);                
    } else {        
    DosomethingElse(x.name, y.name);
  }
 }
}

【问题讨论】:

    标签: linq if-statement foreach refactoring


    【解决方案1】:

    您不能(也不应该)在 LINQ 中执行for each。请参阅https://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx 了解原因。

    但是,您所做的是叉积(或 carthesian 积)。你可以这样表述:

    from x in PredomHierarchy
    from y in RecesesHierarchy
    select new {x,y}
    

    然后只迭代结果集合:

    .ToList().ForEach(item => {if (item.x.name == item.y.name) DoSomething(x,y); else DoSomethingElse(x,y);});
    

    此时,您可能使用嵌套的for each 调用会更好。

    【讨论】:

    • ToList().ForEach 毫无意义且效率低下。您可以改用 foreach,这正是 OP 已经在做的事情。
    • @Tim:嗯,是的,这不是我刚才说的吗?好吧,让我删除可能以使其更清晰。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多