将方法标记为安全

这是关于ReSharper的警告“访问配置封闭”,这通常是在一个lambda中使用后来处理的对象时出现的。 在C#中使用处置闭包? 更详细地讨论这一点。

我的问题是:对于采用这种lamdbas并立即执行它们的方法(这样可以确保它们始终在处理该对象之前执行):

有没有办法将它们标记为安全的,以便任何使用该方法的代码不再产生这些警告?

例:

using (var myObject = new MyDisposableObject())
{
    DoThisTwice(() => myObject.DoSomething());
}

...

void DoThisTwice(Action do)
{
    do();
    do();
}

DoThisTwice接受一个委托(或一个lambda)并同步执行它。 当方法返回时,lambda将不再执行。 只有myObject被处置,所以我们很好去。 我们可以用一条评论标出调用DoThisTwice的路线,但是必须在所有使用该方法的地方以类似的方式完成。 相反,我想将DoThisTwice标记为安全的,因此Resharper不会为该方法的任何调用者显示任何警告。


您可以使用ReSharper的注释来解决这个问题。 ReSharper无法知道闭包会持续多长时间,例如它可能被分配给一个字段,所以它警告你可能会使用在lambda被调用时会被丢弃的东西。

你可以像这样修复它:

void DoThisTwice([InstantHandle] Action action)
{
    action();
    action();
}

InstantHandle属性告诉ReSharper该操作立即被调用,并且不会超出该方法的范围。

链接地址: http://www.djcxy.com/p/54041.html

上一篇: mark methods as safe

下一篇: Do HttpClient and HttpClientHandler have to be disposed?