是CA1001:TypesThatOwnDisposableFieldsShouldBeDisposable有效吗?

时间:2010-03-17 13:06:04

标签: c# code-analysis ca1001

如果我有以下代码:

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:实施   可以在'Foo'上使用IDis   因为它创造了成员   以下IDisposable类型:   '的ManualResetEvent'。

这在此实例中似乎无效,因为我通过ManualResetEvent块处理using

我在这里遗漏了什么或者规则中是否有错误?

4 个答案:

答案 0 :(得分:4)

确实似乎是一种虚假的警告。您使用的是什么版本的FxCop?据报道它是bug但现在可能已经解决了。

答案 1 :(得分:3)

让我猜一下:您正在访问lambda表达式中的信号,错误消息中的“..”是编译器生成的类。在这种情况下,可以安全地禁止消息。

答案 2 :(得分:1)

根据this post,这是一个已知错误,因此应该保存以忽略错误。

答案 3 :(得分:0)

我同意。这没有任何意义 - 信号不会无法生存。在我看来像解析器中的错误(对于条件)。我会记录它并在文件中添加一个pgragma来支持它。