gpt4 book ai didi

c# - LINQ & IEnumerable 重新求值

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

早上好

我编写了以下 LINQ 查询

 public static Func<String, IEnumerable<String>> ListaCorreccoes = (StrPalavra) =>
{

return (from StrTmp in ListaPossiveisCorreccoes(StrPalavra)
from StrTmp2 in ListaPossiveisCorreccoes(StrTmp)
where PalavraConhecida(StrTmp2)
select StrTmp2).Distinct();

};

令我惊讶的是,这比使用两个 foreach 快得多冰柱。使用 ListaTmp = ListaCorreccoes("comutador"); 运行此函数后, 其中ListaTmp类型为 IEnumerable<String> , 我需要打印 ListaTmp的基数使用

        Console.Write(">> Prima qualquer tecla para listar todas as " + ListaTmp.Count() + " correcções...");

并打印ListaTmp的内容, 使用

foreach (String StrTmp in ListaTmp)
Console.WriteLine(StrTmp);

但是,最后一行代码和前一行代码都会导致 ListaTmp,从而使查询重新求值,这非常奇怪,因为变量被分配的结果是查询。为什么这段代码有如此奇怪的行为?

非常感谢。

最佳答案

那是因为 LINQ 使用延迟执行。参见 Charlie Calvert's article on LINQ and Deferred Execution .

试试这个:

var ListaTmp = ListaCorreccoes("comutador").ToList();

这会枚举一次并将结果存储在 List<string> 中.

您可能会发现 Jon Skeet 的文章很有用:

关于c# - LINQ & IEnumerable<String> 重新求值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3976113/

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