【发布时间】:2019-05-28 17:53:29
【问题描述】:
我的理解是,当委托可能被存储和稍后调用或在不同的线程上调用时,“访问修改的闭包”警告是警告我从委托访问局部变量,以便局部变量不是在实际代码执行时实际可用。这当然是明智的。
但是,如果我正在创建一个我知道将在同一个线程中立即调用的委托怎么办?然后不需要警告。例如代码中生成警告:
delegate void Consume();
private void ConsumeConsume(Consume c)
{
c();
}
public int Hello()
{
int a = 0;
ConsumeConsume(() => { a += 9; });
a = 1;
return a;
}
这里不会有问题,因为ConsumeConsume 总是立即调用该函数。有没有办法解决?有什么方法可以注释函数ConsumeConsume 以指示 ReSharper 将立即调用委托?
有趣的是,当我将 ConsumeConsume(() => { a += 9; }); 行替换为:
new List<int>(new[] {1}).ForEach(i => { a += 9; });
做同样的事情,不会产生警告。这只是 ReSharper 的一个内置异常,还是我可以做类似的事情来指示立即调用委托?
我知道我可以禁用这些警告,但这不是我们想要的结果。
【问题讨论】: