-6ren">
gpt4 book ai didi

c# - Linq选择奇怪的效果

转载 作者:行者123 更新时间:2023-11-30 20:28:32 25 4
gpt4 key购买 nike

我注意到下面程序中奇怪的 Linq select 行为:

IEnumerable<string> s = new List<string>() { "1", "2", "3" };
var i = s.Select(url =>
{
Console.WriteLine(url);
url = string.Format("--{0}--",url);
return url;
}
);

Console.WriteLine("done with selector");
foreach (string f in i)
{
Console.WriteLine("f is {0}", f);
}

输出是:

1
f is --1--
2
f is --2--
3
f is --3--

我期望输出是:

1
2
3
f is --1--
f is --2--
f is --3--

如何解释这种奇怪的行为?是某种代码优化吗?

最佳答案

您的代码完美地说明了延迟执行在 LINQ 中的工作方式:

  • "done with selector" 行首先打印,因为 Select 会“记住”用于计算序列的信息,而不是实际计算它
  • 来自 Select 内的 lambda 和来自循环内的 WriteLine 的行是交错的,因为序列是在您继续枚举它时生成的
  • 如果您在序列中间跳出循环,则 lambda 的其余打印输出将永远不会出现。

如果您在 Select 之后添加 ToList,您的代码将“急切”地生成序列,从而导致您期望的输出 ( demo )。

关于c# - Linq选择奇怪的效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47186089/

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