轻松替换嵌套的foreach

4es*_*est 2 c# linq foreach loops

我有两个嵌套的foreach循环:

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

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

Dmi*_*nko 6

从技术上讲,您可以输入Linq查询:

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

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

foreach (var action in actions)
  action();
Run Code Online (Sandbox Code Playgroud)

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

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