作为我们 Visual Studio 2010(主要是 C# 4.0)开发标准的一部分,我们启用了代码分析。当我审查最近提交的新项目代码时,我看到了大量
CA2000:Microsoft.Reliability:在方法“XYZ”中,对象“ABC”并未沿所有异常路径进行处理。在对对象“ABC”的所有引用超出范围之前调用 System.IDisposable.Dispose。
警告。问题是我所做的任何事情似乎都无法消除警告——而且我已经花了几个小时在网上搜索并尽我所能。
首先,让我明确一点,我不是在谈论放置一个简单的 using 块来正确处理局部变量——这不是问题。就我而言,当对象由方法返回或分配给方法中的另一个对象时,就会出现这些警告。
这是一个包含四个此类警告的代码示例:
public void MainMethod()
{
var object1 = CreateFirstObject(); // Warning here
var object2 = CreateSecondObject(); // Warning here
SomeCollectionProperty.Add(object1);
SomeCollectionProperty.Add(object2);
}
private SomeObject CreateFirstObject()
{
var theObject = new SomeObject() // Warning here
{
FirstProperty = "some value",
// ...
};
return theObject;
}
private SomeOtherObject CreateSecondObject()
{
var theObject = new SomeOtherObject() // Warning here
{
FirstProperty = "a different value",
// ...
};
return theObject;
}
我已经评论了出现警告的行。
我已尝试按照 MSDN 文章(此处)中的描述重构这两种 Create 方法,但仍然出现警告。
更新 我应该注意到 SomeObject 和 SomeOtherObject 都实现了 IDisposable。
此外,虽然对象初始化器可能是问题的一个组成部分,但请记住,初始化器与两个私有方法隔离,与 MainMethod 中的警告无关。
谁能告诉我如何正确实施这些方法来消除 CA2000 警告?