Является ли 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 вы используете? Как сообщается, это ошибка, но может быть решена сейчас.

Позвольте мне угадать: вы получаете доступ к сигналу в лямбда-выражении, а '..' в сообщении об ошибке является классом, сгенерированным компилятором. В этом случае безопасно подавить сообщение.

Согласно этому сообщению это известная ошибка, и поэтому ее следует сохранить, чтобы игнорировать ошибку.

Согласен. Это не имеет смысла - сигнал не выживет нерасположенным. Похоже на ошибку в парсере (по условию). Я бы задокументировал это и положил в файл прагму, чтобы поддержать это.

Другие вопросы по тегам