使用时会出现CA2213警告? (null-conditional Operator)调用Dispose

时间:2016-03-25 22:43:37

标签: c# code-analysis idisposable

我正在实施IDisposable,并且在我的Dispose()方法中,在其他受管资源上调用Dispose()时,我使用?.运算符就像这样:

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        if(disposing)
        {
            _ChangeLock?.Dispose();
        }
    }

我仍然得到以下code analysis error

  

CA2213:' MyClass'包含字段' MyClass._ChangeLock'这是IDisposable类型:' ReaderWriterLockSlim'。在' MyClass'上更改Dispose方法在此字段上调用Dispose或Close。

如果我更改为标准空检查,则代码分析警告消失:

if(_ChangeLock != null)
    _ChangeLock.Dispose();

使用null条件运算符是否有问题,或者这个代码分析规则是否过时,或者是什么?

1 个答案:

答案 0 :(得分:17)

这是带有FxCop的known issue

看来他们有decided not to fix it

  

我们决定削减[CA2213],因为如果没有更深入的分析,跟踪变量和可能有注释,很难做到正确。目前的实施非常嘈杂,并且有很多误报,规则的价值不值得它产生的所有噪音。