这个让我有点困惑......尝试处理XmlReader
XmlReader reader = XmlReader.Create(filePath);
reader.Dispose();
提供以下错误:
然而,以下情况很好:'System.Xml.XmlReader.Dispose(bool)'因其无法访问 保护水平
using(XmlReader reader = XmlReader.Create(filePath))
{
}
当我查看Reflector中的定义时,我无法理解为什么我不能调用Dispose
Dispose的实施:
任何人都可以指出我缺少的东西吗?
答案 0 :(得分:19)
问题是XmlReader
使用显式接口实现到implement IDisposable
。所以你可以写:
XmlReader reader = XmlReader.Create(filePath);
((IDisposable)reader).Dispose();
但是,我强烈建议您使用using
声明。除了在另一个Dispose
实施中之外,您应该明确地调用Dispose
非常。
编辑:如上所述,这在.NET 4.5中是“固定的”,因为它从.NET 4.5开始显示public parameterless Dispose
method以及显式接口实现。所以大概是你正在编译.NET 4.0或更早版本(可能是.NET 2.0给出你的标签)但是使用Reflector对抗.NET 4.5?
答案 1 :(得分:-2)
using(XmlReader reader = XmlReader.Create(filePath))
{
foo(reader);
}
完全等同于
XmlReader reader = XmlReader.Create(filePath);
try
{
code(reader);
}
finally
{
if(reader != null)
((IDisposable)reader).Dispose();
}
最可能的事情是你没有发布所有代码 - 也许其他人也在你的对象上调用Dispose(),在第二次调用Dispose()时导致异常?