Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以简单的方式替换嵌套的foreach_C#_Linq_Loops_Foreach - Fatal编程技术网

C# 以简单的方式替换嵌套的foreach

C# 以简单的方式替换嵌套的foreach,c#,linq,loops,foreach,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执行相同的代码?或者用最简单的方法?LINQ方法是: var v

我有两个嵌套的foreach循环:

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

可以使用LINQ执行相同的代码?或者用最简单的方法?

LINQ方法是:

var values=from项目
其中item.Value==“True”
来自appSeedData中的对
其中item.Key.Contains(pair.Key)
选择pair.Value;
foreach(值中的var值){…}

然而,就我个人而言,我更喜欢你已经拥有的东西。它是清晰的、显而易见的,等等。

从技术上讲,您可以放置Linq查询:

然后执行每个(
操作
?)值:

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


这里有另一种可能的方法,但我同意@Dmitry的答案

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

“可以使用LINQ执行相同的代码?或者以最简单的方式?”-是的,但是。。。你所拥有的在我看来已经很好了,它比LINQ更有效,而且已经是“最简单的方法”。你怎么会认为这是“最难”(或不那么容易)的方法?我在想如何使用LINQ,因为它现在非常普遍…@4est你知道还有什么“现在非常普遍”吗?人们试图毫无理由地将完美的代码迁移到LINQ。
foreach (var action in actions)
  action();
foreach (var item in appArray.Where(x => x.Value == "True")))
  foreach (var pair in appSeedData.Where(p => item.Key.Contains(p.Key)))
    pair.Value();
appArray.Where(item => item.Value == "True").ForEach(item => 
    appSeedData.Where(pair => item.Key.Contains(pair.Key)).ForEach(pair => {
        // do work
    }));