通常,当您处置私有成员时,您可能会执行以下操作:
public void Dispose() {
var localInst = this.privateMember;
if (localInst != null) {
localInst.Dispose();
}
}
本地分配的目的是避免在空检查之后另一个线程可能将私有成员分配为空的竞争条件。在这种情况下,我不在乎是否Dispose
在实例上调用了两次。
我一直使用这种模式,所以我写了一个扩展方法来做到这一点:
public static void SafeDispose(this IDisposable disposable)
{
if (disposable != null)
{
// We also know disposable cannot be null here,
// even if the original reference is null.
disposable.Dispose();
}
}
现在在我的课堂上,我可以这样做:
public void Dispose() {
this.privateMember.SafeDispose();
}
问题是,FxCop 不知道我正在这样做,它给了我CA2000:在每种情况下都失去范围警告之前处理对象。
我不想关闭这条规则,也不想压制每一个案例。有没有办法向 FxCop 暗示这种方法就Dispose
它而言是等效的?