通常、プライベートメンバーを破棄する場合は、次のようにします。
public void Dispose() {
var localInst = this.privateMember;
if (localInst != null) {
localInst.Dispose();
}
}
ローカル割り当ての目的は、nullチェック後に別のスレッドがプライベートメンバーをnullに割り当てる可能性がある競合状態を回避することです。Dispose
この場合、インスタンスでが2回呼び出されてもかまいません。
私はいつもこのパターンを使用しているので、これを行うための拡張メソッドを作成しました。
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を提供します。すべての場合にスコープ警告を失う前にオブジェクトを破棄します。
このルールをオフにしたくないし、すべてのケースを抑制したくない。Dispose
この方法がそれに関する限り同等であることをFxCopに示唆する方法はありますか?