我是否需要在这两个XmlDataSource对象上调用.Dispose()? “CA2000在丢失范围之前处理对象”告诉我.Dispose()它

时间:2015-10-23 13:34:48

标签: c# dispose xmldatasource

在我极简化的代码示例中,我的Foo()方法调用GetXmlDataSource(),返回XmlDataSource。 CA2000说在丢失范围之前我应该​​Dispose()一个XmlDatasource。

  • 我应该在using语句中包装每个XmlDataSource吗?
  • 我应该在较低的一个中使用try / catch / finally而在上一个中使用using吗?
  • 我是否有效地拥有两个XmlDataSource个对象,一个在upper方法中,另一个在lower方法中?

我对这个语言行为有点模糊,我想成为一个好孩子。

void Foo()
{
    XmlDataSource xds = GetXmlDataSource();
}

XmlDataSource GetXmlDataSource()
{
    XmlDataSource xmlDataSource = new XmlDataSource();
    return xmlDataSource;
}

2 个答案:

答案 0 :(得分:1)

  

我应该将每个XmlDataSource包装在using语句中吗?

如果它超出了该方法的范围,是的,你应该。顺便说一句,您也可以对来自其他方法的变量使用using

  

我应该在较低的一个中使用try / catch / finally吗?

是和否。不应处理XmlDataSource,因为您打算在其他方法中使用它。如果你有一个阻止变量传递的异常,你应该处理它。

  

我应该在上面使用吗?

是的,你应该。这段代码可以完成这项工作。

using (XmlDataSource xds = GetXmlDataSource())
{ }
  

我是否有效地拥有两个XmlDataSource个对象,一个在upper方法中,另一个在lower方法中?

不,你有一个。这就是为什么你不应该丢弃较低的一个。有一个参考从一种方法传递到另一种方法。

答案 1 :(得分:0)

1)仅包含使用中的最终用法。 2)不,使用就足够了(注意使用的底层实现是一个try / finally)。 3)你只有一个对象实例。