我现在陷入困境,试图找到问题的根源。我们缺乏异常处理,所以我有点猜测错误来自哪里。这是我的问题,如果一个方法返回一个 XmlTextReader 对象,如果该对象被包装在 try/catch/finally 中,而 finally 块执行 .Close() 方法,该对象是否会变为 null?
如果是,我该如何正确处理这些资源,我知道没有 .Clone() 或 .Copy() 方法,还有其他方法可以实现吗?我是否应该关心处理 XmlTextReader 和 XmlReader 对象?
谢谢
我现在陷入困境,试图找到问题的根源。我们缺乏异常处理,所以我有点猜测错误来自哪里。这是我的问题,如果一个方法返回一个 XmlTextReader 对象,如果该对象被包装在 try/catch/finally 中,而 finally 块执行 .Close() 方法,该对象是否会变为 null?
如果是,我该如何正确处理这些资源,我知道没有 .Clone() 或 .Copy() 方法,还有其他方法可以实现吗?我是否应该关心处理 XmlTextReader 和 XmlReader 对象?
谢谢
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
。