这篇文章讲述的是ReSharper的警告“访问已释放的闭包”,通常在一个稍后被释放的对象被用在lambda表达式中时出现。更多详情请见C#中的访问已释放的闭包?。
我的问题是:对于接受这种lambda表达式并立即执行它们的方法(因此您可以确保它们在该对象被释放之前始终被执行):
是否有一种方法可以将它们标记为安全,以使使用该方法的任何代码不再产生这些警告?
例如:
我的问题是:对于接受这种lambda表达式并立即执行它们的方法(因此您可以确保它们在该对象被释放之前始终被执行):
是否有一种方法可以将它们标记为安全,以使使用该方法的任何代码不再产生这些警告?
例如:
using (var myObject = new MyDisposableObject())
{
DoThisTwice(() => myObject.DoSomething());
}
...
void DoThisTwice(Action do)
{
do();
do();
}
DoThisTwice接受一个委托(或Lambda表达式)并同步执行它。方法返回时,Lambda将不再执行。只有在此之后,myObject
才被处理,所以我们可以放心使用。我们可以在调用DoThisTwice
的代码行上加上注释,但需要在所有使用该方法的类似方式的地方都这样做。相反,我想把DoThisTwice
标记为安全的,这样Resharper就不会为任何调用该方法的人显示任何警告。