早上好,
我写了下面的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的文章很有用:
Iterators, iterator blocks and data pipelines
Iterator block implementation details: auto-generated state machines
关于c# - LINQ和IEnumerable <String>重新评估,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3976113/