Обычно, когда вы размещаете частный член, вы можете сделать следующее:
public void Dispose() {
var localInst = this.privateMember;
if (localInst != null) {
localInst.Dispose();
}
}
Цель локального назначения - избежать условия гонки, когда другой поток может назначить частному члену 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
насколько это касается?