Обычно, когда вы удаляете закрытый член, вы можете сделать следующее:
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
?