我是否需要在这两个 XmlDataSource objects 上调用 .Dispose()? "CA2000 Dispose objects before losing scope" 告诉我 .Dispose() 它

Do I need to call .Dispose() on both of these XmlDataSource objects? "CA2000 Dispose objects before losing scope" tells me to .Dispose() it

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

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

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

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

Should I wrap each XmlDataSource in a using statement?

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

Should I use try/catch/finally in the lower one?

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

Should I use using in the upper one?

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

using (XmlDataSource xds = GetXmlDataSource())
{ }

Do I effectively have two XmlDataSource objects, one in the upper method and one in the lower method?

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

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