【发布时间】:2014-02-05 05:47:45
【问题描述】:
这是关于 ReSharper 的警告“访问已处置的闭包”,通常在 lambda 中使用稍后处置的对象时出现。 Access to disposed closure in C#? 更详细地讨论了这一点。
我的问题是:对于采用此类 lamdbas 并立即执行它们的方法(因此您可以确保它们始终在所述对象被释放之前执行):
有没有办法将它们标记为安全,以便使用该方法的任何代码不再产生这些警告?
例子:
using (var myObject = new MyDisposableObject())
{
DoThisTwice(() => myObject.DoSomething());
}
...
void DoThisTwice(Action do)
{
do();
do();
}
DoThisTwice 接受一个委托(或一个 lambda)并同步执行它。当方法返回时,lambda 将不再被执行。只有这样myObject 才会被处理掉,所以我们可以开始了。我们可以用注释标记调用DoThisTwice 的行,但这必须在所有地方以类似的方式使用该方法完成。相反,我想将 DoThisTwice 标记为安全,这样 Resharper 就不会为该方法的任何调用者显示任何警告。
【问题讨论】:
标签: c# lambda closures resharper idisposable