我现在正试图找到问题的根源。我们的异常处理缺乏,所以我有点猜测错误的来源。这是我的问题,如果一个方法返回一个XmlTextReader对象,如果该对象包含在try / catch / finally中,且finally块执行.Close()方法,那么该对象是否为null?
如果是,我怎么能正确处理这些资源,我知道没有.Clone()或.Copy()方法,还有另一种方法可以实现吗?我是否应该关心处理XmlTextReader和XmlReader对象?
由于
答案 0 :(得分: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中许多类使用的方法是在调用Dispose
后使用ObjectDisposedException访问对象的所有调用失败。