gpt4 book ai didi

c# - Linq 使用本地值延迟执行

转载 作者:太空狗 更新时间:2023-10-29 21:29:04 24 4
gpt4 key购买 nike

我一直在试验 Linq 以了解它的功能 - 到目前为止我真的很喜欢它:)

我为算法编写了一些查询,但没有得到预期的结果...枚举总是返回空值:

案例#1

List<some_object> next = new List<some_object>();
some_object current = null;

var valid_next_links =
from candidate in next
where (current.toTime + TimeSpan.FromMinutes(5) <= candidate.fromTime)
orderby candidate.fromTime
select candidate;

current = something;
next = some_list_of_things;

foreach (some_object l in valid_next_links)
{
//do stuff with l
}

我将查询声明更改为这样的内联,并且工作正常:

案例 #2

 foreach (some_object l in
(from candidate in next
where (current.toTime + TimeSpan.FromMinutes(5) <= candidate.fromTime)
orderby candidate.fromTime
select candidate))
{
//do stuff with l
}

有人知道为什么它在案例 #1 中不起作用吗?按照我的理解,当您声明查询时,查询没有被评估,所以我看不出有什么不同。

最佳答案

将捕获对 current 的更改,但查询已经知道 next。将额外的项目添加到现有列表将使它们显示在查询中,但是更改变量的值以完全引用不同的列表不会有任何效果。基本上,如果您在头脑中将查询从查询​​表达式扩展为“正常”形式,则 lambda 表达式中出现的任何变量都将被捕获为变量,但直接作为参数出现的任何变量都将被立即求值。这只会捕获变量的 reference 值,而不是列表中存在的项目,但这仍然意味着不会看到更改变量值本身。您的第一个查询扩展为:

var valid_next_links = next
.Where(candidate => (current.toTime + TimeSpan.FromMinutes(5) <= candidate.fromTime))
.OrderBy(candidate => candidate.fromTime);

关于c# - Linq 使用本地值延迟执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11101669/

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