0

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

  • 我应该将每个包装XmlDataSource在 using 语句中吗?
  • 我应该在下方使用try//并在上方使用 a 吗catchfinallyusing
  • 我是否有效地有两个XmlDataSource对象,一个在上层方法中,一个在下层方法中?

我对这方面的语言行为有点模糊,我想成为一个好男孩。

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

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

2 回答 2

2

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

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

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

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

我应该在上面使用 using 吗?

是的你应该。这段代码将完成这项工作。

using (XmlDataSource xds = GetXmlDataSource())
{ }

我是否有效地有两个XmlDataSource对象,一个在上层方法中,一个在下层方法中?

不,你有一个。这就是为什么你不应该处置较低的。有一个引用从一种方法传递到另一种方法。

于 2015-10-23T13:41:22.363 回答
1

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

于 2015-10-23T13:41:31.093 回答