返回一次性物体并获得CA2000警告

时间:2017-05-31 08:31:15

标签: .net idisposable xmlnode ca2000

我正在尝试将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);

1 个答案:

答案 0 :(得分:2)

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

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

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

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

using (XmlNodeReader reader = new XmlNodeReader(section))
{
    return ser.method(reader);
}