chi*_*oro 15 c# resharper lambda closures idisposable
这是关于ReSharper的警告"进入处置关闭",这通常在稍后处置的物体用于lambda时出现.在C#获得处置关闭?更详细地讨论了这一点.
我的问题是:对于采用这种lamdbas并立即执行它们的方法(因此你可以确定它们总是在处理所述对象之前执行):
有没有办法将它们标记为安全,以便使用该方法的任何代码都不再产生这些警告?
例:
using (var myObject = new MyDisposableObject())
{
DoThisTwice(() => myObject.DoSomething());
}
...
void DoThisTwice(Action do)
{
do();
do();
}
Run Code Online (Sandbox Code Playgroud)
DoThisTwice接受委托(或lambda)并同步执行它.到方法返回时,将不再执行lambda.只有这样myObject才会被处理掉,所以我们很高兴.我们可以DoThisTwice用注释来标记调用行,但必须以类似的方式在所有地方使用该方法完成.相反,我想标记DoThisTwice为安全,因此Resharper不会为该方法的任何调用者显示任何警告.
cit*_*att 25
您可以使用ReSharper的注释来解决此问题.ReSharper无法知道闭包将持续多长时间,例如它可能被分配给一个字段,因此它会警告您可能正在使用将在调用lambda时处理的内容.
你可以像这样解决它:
void DoThisTwice([InstantHandle] Action action)
{
action();
action();
}
Run Code Online (Sandbox Code Playgroud)
该InstantHandle属性告诉ReSharper,该操作立即被调用,而不是存储在方法范围之外.