所以,为了保持简短,我有这样一段代码,在其中我循环通过字符串拆分的结果,并将它们添加到列表中,如果它们在循环之前没有出现过。这是密码
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);
}
型
3条答案
按热度按时间r1zhe5dt1#
下面是
Linq
查询的延迟求值的示例。字符串
输出的结果将是
型
正如您所看到的,只有当
foreach
循环需要下一个元素时,lambda才会被计算xienkqul2#
基本上,你只是想得到不同的值:
字符串
juud5qan3#
我构建在Dmitry's answer上,并使输出更详细一些,以向您展示实际情况。还要注意,作为Ufuk noted,有更好的方法来实现不同值的列表。
你可以自己测试一下,在这个dotnetfiddle中稍微玩一下。
示例如下:
字符串
输出如下:
型