我正在实施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条件运算符是否有问题,或者这个代码分析规则是否过时,或者是什么?
答案 0 :(得分:17)
这是带有FxCop的known issue。
看来他们有decided not to fix it:
我们决定削减[CA2213],因为如果没有更深入的分析,跟踪变量和可能有注释,很难做到正确。目前的实施非常嘈杂,并且有很多误报,规则的价值不值得它产生的所有噪音。