Является ли CA1001: TypesThatOwnDisposableFieldsShouldBeDisposable допустимым?
Если у меня есть следующий код:
public class Foo
{
public void Bar()
{
var someTypeWithAnEvent = new SomeTypeWithAnEvent();
using (var signal = new ManualResetEvent(false))
{
someTypeWithAnEvent.Begun += (sender, e) => signal.Set();
someTypeWithAnEvent.Begin();
signal.WaitOne();
}
}
}
FxCop, похоже, выдает ошибку CA1001:
CA1001: Microsoft.Design: реализовать IDisposable для 'Foo', потому что он создает члены следующих типов IDisposable: 'ManualResetEvent'.
Это не кажется действительным в этом случае, потому что я избавляюсь от ManualResetEvent
сквозь using
блок.
Я что-то здесь упускаю или в правиле есть ошибка?
4 ответа
Похоже, ложное предупреждение действительно. Какую версию FxCop вы используете? Как сообщается, это ошибка, но может быть решена сейчас.
Позвольте мне угадать: вы получаете доступ к сигналу в лямбда-выражении, а '..' в сообщении об ошибке является классом, сгенерированным компилятором. В этом случае безопасно подавить сообщение.
Согласно этому сообщению это известная ошибка, и поэтому ее следует сохранить, чтобы игнорировать ошибку.
Согласен. Это не имеет смысла - сигнал не выживет нерасположенным. Похоже на ошибку в парсере (по условию). Я бы задокументировал это и положил в файл прагму, чтобы поддержать это.