我应该关注linq查询中的"访问修改后的闭包"吗?

Pau*_*yer 15 c# linq

我有一个显示错误的linq查询:

替代文字

如果集合的源是linq查询,我在任何时候尝试访问我正在迭代的变量时都会看到此错误.我想这个错误只是告诉我变量可能会改变,或类似的东西?

Jon*_*Jon 21

此错误告诉pubConfig您查询内部的引用将使用pubConfig 评估查询时的值,而不是在您定义查询并将其存储的时间pubConfigSettings.

实际上,如果"在现场"评估查询,您就可以了.如果您将其保留以供以后评估,以及pubConfig同时更改的值,您将遇到意外结果.


Mar*_*ers 11

您正在关闭被认为有害的循环变量 .查询引用变量,而不是创建查询时变量的值.目前尚不清楚它是否会在您的特定代码示例中导致您出现问题(这取决于您对已创建的查询执行的操作),但通常您应该避免这种情况,因为它可能导致难以调试问题.

一个简单的解决方案是在查询中引用它之前获取循环变量的副本.

foreach (var pubConfig in ...)
{
    var pubConfig2 = pubConfig;
    // Use pubConfig2 instead of pubConfig in the query.
}
Run Code Online (Sandbox Code Playgroud)