0

我现在陷入困境,试图找到问题的根源。我们缺乏异常处理,所以我有点猜测错误来自哪里。这是我的问题,如果一个方法返回一个 XmlTextReader 对象,如果该对象被包装在 try/catch/finally 中,而 finally 块执行 .Close() 方法,该对象是否会变为 null?

如果是,我该如何正确处理这些资源,我知道没有 .Clone() 或 .Copy() 方法,还有其他方法可以实现吗?我是否应该关心处理 XmlTextReader 和 XmlReader 对象?

谢谢

4

1 回答 1

1

XmlReader在将其返回给调用者之前,您不得关闭/处置。

不,Dispose/Close不要分配null给一个对象——他们只是要求对象释放它认为需要释放的任何资源。

XmlReader GetReader()
{
   XmlRead reader = ....

   // DO NOT dispose/close reader here with 
   // reader.Dispose() or using(reader){...}

   return reader;
}

用法:

using(var reader = GetReader()) {...}

请注意,许多类型可以防止在Dispose调用后访问数据。.Net 中许多类使用的方法是在调用ObjectDisposedException之后使所有访问对象状态的调用失败Dispose

于 2012-05-17T16:53:04.817 回答