gpt4 book ai didi

c# - ReSharper 中修改的关闭警告

转载 作者:太空狗 更新时间:2023-10-29 23:58:35 25 4
gpt4 key购买 nike

我希望有人能向我解释这段代码中可能会发生什么坏事,这会导致 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)
);

最佳答案

在该特定代码中没有任何内容,以下面为例:

int myVal = 2;

var results = myDatabase.Table.Where(record => record.Value == myVal);

myVal = 3;

foreach( var myResult in results )
{
// TODO: stuff
}

看起来 result 将返回值为 2 的所有记录,因为这就是您声明查询时 myVal 设置的值。但是,由于延迟执行,它实际上是值为 3 的所有记录,因为在您迭代查询之前不会执行查询。

在您的示例中,该值未被修改,但 Resharper 警告您它可能被修改并且延迟执行可能会给您带来问题。

关于c# - ReSharper 中修改的关闭警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2951037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com