Vac*_*ano 2 .net c# resharper closures
我有以下代码:
foreach (var parent in parents)
{
var children = data.Find<Order>(x=>x.ParentOrderId==parent.OrderId).ToList();
// Do stuff with the children variable
}
Run Code Online (Sandbox Code Playgroud)
Resharper告诉我,父变量上有一个Access to Modified closure问题.但是不调用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
}
Run Code Online (Sandbox Code Playgroud)
这就是为什么"访问修改后的闭包"只是一个警告,而不是一个错误.基本上,只要闭包(对它的任何引用)都无法转义循环体的一次迭代,你就可以了.
因为,正如你所提到的, .ToList()评估持有闭包的IEnumerable,你很好,这个警告确实是无害的,你可以用注释安全地压制它.
为了让ReSharper知道这个警告何时是严重的,它不仅必须对闭合进行逃逸分析,而且还必须知道如何保持闭合的方式Find<T>和.ToList()行为.这很可能不会很快发生.
| 归档时间: |
|
| 查看次数: |
392 次 |
| 最近记录: |