0

我正在尝试将 XMLNodeReader 返回到另一个函数但收到 CA2000 警告

XmlNodeReader obj =new XmlNodeReader(section);
return ser.method(obj);

如果我使用以下代码,它会正常工作吗?警告被抑制,但不确定它是否会影响逻辑。

XmlNodeReader tempObj =new XmlNodeReader(section);
XmlNodeReader retObj=null;
retObj = tempObj;
tempObj.Dispose();
return ser.method(retObj);
4

1 回答 1

2

好吧,我们不知道是做什么ser.method的,但是将处置的对象传递method给我对我来说似乎是个坏主意。基本上,您的“修复”很糟糕。

这里有三种可能性(可能还有其他可能性,但这些是主要的):

  • ser.method处理其参数本身。(这可能是一个坏主意,但它可能会这样做。)在这种情况下,您的原始代码很好。
  • ser.method不释放它的参数,但它返回的东西依赖于读者仍然没有被释放
  • ser.method不处理它的参数,并返回不需要读者保持打开的东西

我希望最后一个是这种情况,在这种情况下,您应该将代码更改为:

using (XmlNodeReader reader = new XmlNodeReader(section))
{
    return ser.method(reader);
}
于 2017-05-31T08:35:41.590 回答