为什么局部变量?

Med*_*tor 4 c# linq filter

resharper让我把它变成一个局部变量,写下"访问修改后的闭包"

if (filter != null)
{
    if (filter.CityId != 0)
    {
        ads = ads.Where(x => x.Ad.CityId == filter.CityId);
    }
    if (filter.BusinesCategoryId != 0)
    {
        ads = ads.Where(x => x.BusinessCategoryId == filter.BusinesCategoryId);
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么局部变量过滤?

The*_*lTy 6

因为您的查询(Where(...))没有被执行.我假设过滤器是从循环中获得的?

Linq查询在使用之前不会执行.因此,如果您通过一堆过滤器循环然后开始执行它们,则查询中的过滤器值将是错误的.

类似的问题:访问Modified Closure 还:http://devnet.jetbrains.net/thread/273042

需要看到更多的代码100%肯定.

  • 可以在没有循环的情况下修改闭包.循环是无意中修改闭包变量的最常见原因,但它不是唯一的原因. (2认同)