CA1001: TypesThatOwnDisposableFieldsShouldBeDisposable действительно? - PullRequest
2 голосов
/ 17 марта 2010

Если у меня есть следующий код:

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' потому что это создает членов следующие идентифицируемые типы: 'ManualResetEvent'.

В данном случае это не так, потому что я избавляюсь от ManualResetEvent через using блок.

Я что-то здесь упускаю или в правиле есть ошибка?

Ответы [ 4 ]

4 голосов
/ 17 марта 2010

Похоже, ложное предупреждение действительно. Какую версию FxCop вы используете? По сообщениям, это ошибка , но сейчас ее можно устранить.

3 голосов
/ 17 марта 2010

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

1 голос
/ 17 марта 2010

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

0 голосов
/ 17 марта 2010

Я согласен. Это не имеет смысла - сигнал не выживет нерасположенным. Выглядит как ошибка в парсере (для условия). Я бы задокументировал это и поместил в файл прагму для поддержки.

...