我希望有人能够向我解释下面的代码中可能会发生什么问题,导致ReSharper出现“访问已修改闭包”的警告:
即使上面的代码看起来很安全,但在其他“修改闭包”实例中可能会发生什么不好的事情?我经常在使用LINQ查询时看到这个警告,但我倾向于忽略它,因为我不知道可能出现什么问题。ReSharper尝试通过创建第二个变量来解决这个问题,但我觉得这似乎是毫无意义的,例如它将上面的
bool result = true;
foreach (string key in keys.TakeWhile(key => result))
{
result = result && ContainsKey(key);
}
return result;
即使上面的代码看起来很安全,但在其他“修改闭包”实例中可能会发生什么不好的事情?我经常在使用LINQ查询时看到这个警告,但我倾向于忽略它,因为我不知道可能出现什么问题。ReSharper尝试通过创建第二个变量来解决这个问题,但我觉得这似乎是毫无意义的,例如它将上面的
foreach
行更改为:bool result1 = result;
foreach (string key in keys.TakeWhile(key => result1))
更新:另外一件事,显然整个代码块可以被转换为以下语句,这将不会引起任何修改闭包警告:
return keys.Aggregate(
true,
(current, key) => current && ContainsKey(key)
);
result &= ContainsKey(key);
。 - ChaosPandionbool
类型没有关系吗? - Sarah Vesselsresult &&= ContainsKey(key);
。 - SLaks