【发布时间】:2014-11-21 07:19:44
【问题描述】:
有没有办法标记一个方法,以便代码分析或构建给出错误消息来处理方法返回的对象。例如在下面的方法中。
private void chart1_Click(object sender, EventArgs e)
{
Brush sb = GetBlackBrush();
}
Brush GetBlackBrush()
{
SolidBrush sb = new SolidBrush(Color.Black);
return sb;
}
每当调用 GetBlackBrush 的任何方法,在 VS2010 中构建解决方案时,我都会收到代码分析警告或构建错误或构建警告,以指示我需要处理 Brush 对象。我希望我应该在 chart1_Click() 方法中得到一些指示来处理画笔对象。
这只是一个示例代码,我知道我们应该使用 "Using" 但这里有什么解决方案。
有一个 CA2213 代码分析警告,但在这个特定示例中没有被调用。
【问题讨论】:
-
你真的不想立即处理它,是吗?
-
在这种情况下,代码分析无法判断您是否需要处置该对象。该方法返回对象,这通常意味着它应该不被释放,因为您正在将它交给其他代码。因此,在您的示例中,您应该不使用
using。通常,代码分析可以很好地识别未处理的对象以及不离开方法的对象。你有没有更合理的例子,代码分析没有发现真正的错误? -
这是一个真实的例子,如果你在任何其他方法中使用GetBlackBrush()这个方法,代码分析不会出错。代码分析没有给出错误。
-
请准确发布您使用GetBlackBrush编写的代码,并且不会在代码分析中引起警告。
-
为什么你会期望 CA2213 = "Disposable fields should be dispose" 对于这个示例?它不包含任何一次性字段,仅包含一次性本地引用。不过,我希望在 chart1_Click 方法上看到 CA2000 =“在失去范围之前处理对象”。
标签: c# dispose static-code-analysis