返回XmlTextReader对象,我可以调用.Close()

时间:2012-05-17 16:41:01

标签: c# xmlreader xmltextreader

我现在正试图找到问题的根源。我们的异常处理缺乏,所以我有点猜测错误的来源。这是我的问题,如果一个方法返回一个XmlTextReader对象,如果该对象包含在try / catch / finally中,且finally块执行.Close()方法,那么该对象是否为null?

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

由于

1 个答案:

答案 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访问对象的所有调用失败。