c# – 访问已设置的关闭 – 标记方法安全

前端之家收集整理的这篇文章主要介绍了c# – 访问已设置的关闭 – 标记方法安全前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是关于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不会对方法的任何调用显示任何警告.

解决方法

您可以使用ReSharper的注释来修复此问题. ReSharper无法知道关闭持续多长时间,例如它可能被分配到一个字段,所以它警告你,你可能正在使用的东西,将在lambda调用的时候处理.

你可以这样修复:

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

InstantHandle属性告诉ReSharper该操作是立即调用的,不会超出方法的范围.

猜你在找的C#相关文章