gpt4 book ai didi

c# - Linq 和延迟评估

转载 作者:太空狗 更新时间:2023-10-29 22:15:42 25 4
gpt4 key购买 nike

When you use LINQ to define an enumerable collection, either by using the LINQ extension methods or by using query operators,the application does not actually build the collection at the time that the LINQ extension method is executed; the collection is enumerated only when you iterate over it. This means that the data in the original collection can change between executing a LINQ query and retrieving the data that the query identifies; you will always fetch the most up-to-date data.

Microsoft Visual C# 2013 step by step written by John Sharp

我写了下面的代码:

List<int> numbers = new List<int>() { 1, 2, 3, 4, 5 };
IEnumerable<int> res = numbers.FindAll(a => a > 0).Select(b => b).ToList();
numbers.Add(99);
foreach (int item in res)
Console.Write(item + ", ");

上面代码的结果如下所示:

1, 2, 3, 4, 5,

为什么会这样?我知道 FuncActionPredicate 但我不知道这里发生了什么。根据上面的定义,代码是不合理的。

最佳答案

除了最后的 ToList() 之外,它正在创建一个新的集合,您还有另一个问题。

问题是您根本没有使用 LINQ。

FindAll 不是 LINQ 扩展方法。

你应该使用Where:

List<int> numbers = new List<int>() { 1, 2, 3, 4, 5 };
IEnumerable<int> res = numbers.Where(a => a > 0);

numbers.Add(99);

foreach (int item in res)
Console.Write(item + ", ");

关于c# - Linq 和延迟评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39004141/

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