gpt4 book ai didi

c# - LINQ Lambdas 何时在 foreach 循环中执行

转载 作者:太空宇宙 更新时间:2023-11-03 17:14:33 25 4
gpt4 key购买 nike

所以,为了简短起见,我有这段代码,我在其中循环遍历字符串拆分的结果并将它们添加到列表中(如果它们之前没有出现在循环中)。这是代码。

var res = new List<string>();
foreach(string s in input.Split(new[] { ", " },
StringSplitOptions.RemoveEmptyEntries))
{
if(res.All(p => p != s))
res.Add(s);
}

但是在我写完这段代码后,Visual Studio 说我可以将循环的一部分转换成 LINQ。但是,我有点怀疑这是否可行。

基本上,我的问题是,lambda 表达式是在每个单独的循环中执行,还是只在开始时执行一次?

var res = new List<string>();
foreach (string s in input.Split(new[] { ", " },
StringSplitOptions.RemoveEmptyEntries)
.Where(s => res.All(p => p != s)))
{
res.Add(s);
}

最佳答案

这里是 Linq 查询的惰性求值示例。

List<int> vals = new List<int> {1, 1, 2, 2, 3, 4};
var res = new List<int>();
foreach (int s in vals.Where(s =>
{
Console.WriteLine("lambda");
return s % 2 == 0;
}))
{
Console.WriteLine("loop");
}

输出将是

lambda
lambda
lambda
loop
lambda
loop
lambda
lambda
loop

如您所见,仅当 foreach 循环需要下一个元素时,lambda 才会被求值

关于c# - LINQ Lambdas 何时在 foreach 循环中执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32822138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com