轻松替换嵌套的foreach

时间:2019-07-18 07:04:40

标签: c# linq loops foreach

我有两个嵌套的 foreach 循环:

foreach (var item in appArray)
{
  if (item.Value == "True")
  {
    foreach (var pair in appSeedData)
    {
      if (item.Key.Contains(pair.Key))
        pair.Value();
    }
  }         
}

可以使用 LINQ 来执行相同的代码吗?还是最简单的方式?

3 个答案:

答案 0 :(得分:6)

通常,您可以输入 Linq 查询:

var actions = appArray
  .Where(item => (item.Value == "True")
  .SelectMany(item => appSeedData
    .Where(pair => item.Key.Contains(pair.Key))
    .Select(pair => pair.Value));

,然后执行每个(Action?)值:

foreach (var action in actions)
  action();

但是我怀疑它是否更具可读性;我建议 Linq foreach 组合

foreach (var item in appArray.Where(x => x.Value == "True")))
  foreach (var pair in appSeedData.Where(p => item.Key.Contains(p.Key)))
    pair.Value();

答案 1 :(得分:3)

LINQ方式为:

var values = from item in appArray
             where item.Value == "True"
             from pair in appSeedData
             where item.Key.Contains(pair.Key)
             select pair.Value;

foreach (var value in values) {...}

但是,我个人更喜欢您已经拥有的东西。清楚,明显等。

答案 2 :(得分:0)

这是另一种可行的方法,但我同意@Dmitry的回答。

appArray.Where(item => item.Value == "True").ForEach(item => 
    appSeedData.Where(pair => item.Key.Contains(pair.Key)).ForEach(pair => {
        // do work
    }));