x.ParentOrderId==parent.Or-6ren">
gpt4 book ai didi

c# - ToList() 删除是否需要解决 "Access to Modified Closure"resharper 警告?

转载 作者:行者123 更新时间:2023-11-30 18:57:18 31 4
gpt4 key购买 nike

我有以下代码:

foreach (var parent in parents)
{
var children = data.Find<Order>(x=>x.ParentOrderId==parent.OrderId).ToList();
// Do stuff with the children variable
}

Resharper 告诉我,我在父变量上有一个 Access to Modified 闭包问题。但是调用 ToList() 不是意味着它会立即被评估吗?

这是否否定了这样做的必要性?

foreach (var parent in parents)
{
var parentClosure = parent;
var children = data.Find<Order>(x=>x.ParentOrderId==parentClosure.OrderId).ToList();
// Do stuff with the children variable
}

最佳答案

这就是为什么“访问修改后的闭包”只是一个警告,而不是一个错误。基本上,只要该闭包(对它的任何引用)无法逃脱循环体的一次迭代,就可以了。

因为,正如您提到的,.ToList()评估持有闭包的 IEnumerable,你没问题,这个警告确实是无害的,你可以安全地通过评论禁止它。

为了让 ReSharper 知道此警告何时严重,它不仅必须对闭包执行逃逸分析,还必须知道 Find<T> 是如何发生的。和 .ToList()保持闭包的行为。这可能不会很快发生。

关于c# - ToList() 删除是否需要解决 "Access to Modified Closure"resharper 警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8329649/

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