gpt4 book ai didi

c# - 使用基于秒表的 Func 作为循环控制变量

转载 作者:行者123 更新时间:2023-11-30 16:50:42 26 4
gpt4 key购买 nike

尝试使用 Func<bool>作为循环控制变量,如下所示似乎让 Resharper 感到不安。给定以下秒表:

var executionTimeStopwatch = new Stopwatch();
executionTimeStopwatch.Start();

这会引发“循环控制变量永远不会在循环内更新”警告:

Func<bool> mustStop = () => executionTimeStopwatch.ElapsedMilliseconds < TIMEOUT_MILLISECONDS;
while (!mustStop()) // -> function call
{
// ...
}

但是,这不会:

Func<bool> mustStop = () => executionTimeStopwatch.ElapsedMilliseconds < TIMEOUT_MILLISECONDS;
var k = false; // -> declaration
while (!k) // -> used for loop control
{
k = mustStop(); // -> explicit update
// ...
}

我不明白这些代码的执行结果有何不同;作为mustStop()取决于秒表,它在每次调用时都应该进行不同的评估。

我错过了什么吗?

最佳答案

Am I missing something?

不,两个代码块没有不同。事实上,在大多数情况下,当使用 Release模式编译时,编译器会优化第二个 block 以删除变量 k

Resharper 无法证明循环变量在循环内发生了变化,因为它发生在另一个方法中。简单的 resharper 不够聪明,无法确定 mustStop 委托(delegate)在多次调用时是否可能返回不同的值。

在这种情况下,您可以忽略警告或取消警告。

关于c# - 使用基于秒表的 Func 作为循环控制变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34658010/

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