我有两个嵌套的 foreach 循环:
foreach (var item in appArray)
{
if (item.Value == "True")
{
foreach (var pair in appSeedData)
{
if (item.Key.Contains(pair.Key))
pair.Value();
}
}
}
可以使用 LINQ 来执行相同的代码吗?还是最简单的方式?
答案 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
}));