Сообщите FxCop, что другой метод вызывает dispose

Обычно, когда вы удаляете закрытый член, вы можете сделать следующее:

public void Dispose() {
    var localInst = this.privateMember;
    if (localInst != null) {
        localInst.Dispose();
    }
}

Цель локального назначения — избежать состояния гонки, когда другой поток может назначить частному члену значение null после проверки на null. В этом случае меня не волнует, если 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?

14
задан Haacked 28 June 2012 в 20:42
поделиться