对于下面的评论,这里有一些设置代码:
var allItems = new List<Item>();
allItems.Add(new Item{Id = 1});//etc etc
allItems.Add(new Item{Id = 2, ParentId = 1});//etc etc
给定设置代码;以下代码:
foreach (var parentItem in parentItems)
{
var childItems = allItems.Where(c => c.ParentId == parentItem.Id);
...
}
在 parentItem.Id 下显示警告:
“在闭包中访问 foreach 变量。使用不同版本的编译器编译时可能会有不同的行为。”
但是,如果我将上面的代码(使用 ReSsharper)转换为以下查询表达式:
from parentItem in parentItems
let childItems = allItems.Where(c => c.ParentId == parentItem.Id)
...
我没有收到警告。
这种语法(似乎等于 foreach 语法)是否没有相同的关闭警告/问题?
还是 ReSharper 没有在查询表达式语法中发现这个问题?