C# 调用方函数能否关闭xml读取器资源

C# 调用方函数能否关闭xml读取器资源,c#,xml,C#,Xml,我有以下函数,它获取url路径并获取阅读器。因为我无法关闭阅读器并返回它。调用方能否关闭返回的读卡器对象 public XmlReader GetXMLContent(string Path) { XmlTextReader responseReader= new XmlTextReader(XmlUrlPath);

我有以下函数,它获取url路径并获取阅读器。因为我无法关闭阅读器并返回它。调用方能否关闭返回的读卡器对象

public  XmlReader GetXMLContent(string Path)
        {
         XmlTextReader responseReader= new XmlTextReader(XmlUrlPath);                                                                                              
         return responseReader;
        }

 XmlTextReader myReader =  GetXMLContent("http://sample.xml");
 while() // loop through all the elements 
 {
 }

 myReader.close(); // close the reader

是的,绝对是。当方法返回时,调用方有效地取得了读取器的所有权(在本例中)

诚然,我会用
来代替
语句:

using (XmlTextReader reader = GetXmlContent("http://sample.xml"))
{
    ...
}

。。。使用当前建议的代码,如果抛出异常,则不会关闭读取器。

是的,绝对如此。当方法返回时,调用方有效地取得了读取器的所有权(在本例中)

诚然,我会用
来代替
语句:

using (XmlTextReader reader = GetXmlContent("http://sample.xml"))
{
    ...
}

。。。对于当前建议的代码,如果引发异常,则不会关闭读取器。

您不应使用
XmlTextReader
构造函数。您应该使用
XmlReader
中的facrory方法:

在.NET Framework 2.0版中 发布时,建议的做法是 使用创建XmlReader实例的步骤 Create方法。这 允许您充分利用 本文介绍的新功能 释放

除非你的方法在这篇文章中被简化,否则这也会使你的方法过时

using (XmlReader r = XmlReader.Create("http://sample.xml"))
{
   // read
}
如果您需要该方法,您可以这样做:

public XmlReader GetXMLContent(string path)
{
    XmlReader responseReader = XmlReader.Create(path);   
    // do something special
    return responseReader;
}

using(XmlReader r = this.GetXMLContent("http://sample.xml"))
{
    // read
}

您不应该使用
XmlTextReader
构造函数。您应该使用
XmlReader
中的facrory方法:

在.NET Framework 2.0版中 发布时,建议的做法是 使用创建XmlReader实例的步骤 Create方法。这 允许您充分利用 本文介绍的新功能 释放

除非你的方法在这篇文章中被简化,否则这也会使你的方法过时

using (XmlReader r = XmlReader.Create("http://sample.xml"))
{
   // read
}
如果您需要该方法,您可以这样做:

public XmlReader GetXMLContent(string path)
{
    XmlReader responseReader = XmlReader.Create(path);   
    // do something special
    return responseReader;
}

using(XmlReader r = this.GetXMLContent("http://sample.xml"))
{
    // read
}

@jon我正在将读卡器添加到缓存中,我只在缓存为null时执行关于代码的操作,所以if is use using reader正在关闭object@jon我解释清楚了吗??我基本上是通过使用一些键来缓存sample.xml,我不想每次都加载它,因为它是一个静态文件。我正确地看到了您的代码,方法调用本身正在使用中,kool明白了thanks@gov:啊,你以前没有提到缓存。我建议您不要缓存像
XmlTextReader
这样的一次性类型。为什么不直接读取整个文档并将其缓存为
XDocument
XmlDocument
?缓存一个
XmlReader
是毫无意义的——要么你不得不“倒带”它(如果可能的话),要么从前一个调用方留下它的地方读取,这两者都不吸引人。@jon,如果你不介意的话,你能解释一下为什么我们不应该缓存xmlTextReader对象吗,你能提出一些好的方法吗。基本上,我必须编写一个函数,它可以让xml文件返回一个读取器,因为所有xml文件都是静态的,所以我不能一直进行调用,您能建议一个好的解决方案吗please@jon我将读卡器添加到缓存中,我只在缓存为null时执行关于代码的操作,因此,如果正在使用,则正在使用读卡器关闭object@jon我解释清楚了吗??我基本上是通过使用一些键来缓存sample.xml,我不想每次都加载它,因为它是一个静态文件。我正确地看到了您的代码,方法调用本身正在使用中,kool明白了thanks@gov:啊,你以前没有提到缓存。我建议您不要缓存像
XmlTextReader
这样的一次性类型。为什么不直接读取整个文档并将其缓存为
XDocument
XmlDocument
?缓存一个
XmlReader
是毫无意义的——要么你不得不“倒带”它(如果可能的话),要么从前一个调用方留下它的地方读取,这两者都不吸引人。@jon,如果你不介意的话,你能解释一下为什么我们不应该缓存xmlTextReader对象吗,你能提出一些好的方法吗。基本上,我必须编写一个函数,让xml文件返回读取器,我不能一直调用,因为所有xml文件都是静态的,你能推荐一个好的解决方案吗?我正在使用,但我必须只在缓存为null时执行上述代码,如果存在缓存,我将从缓存中拉出xmlreader,如Jon所说,如果我将代码放在无法重新调用reader对象的内部,因为使用的是解除对象的锁定,那么您确实应该考虑缓存一次性对象的方法。这会给你带来很多麻烦。为什么需要缓存它们?我在使用,但只有当缓存为空时,我才能执行上面的代码,如果缓存存在,我将从缓存中拉出xmlreader,如果我将代码放在里面,我无法重新调用reader对象,因为使用正在解除对象的锁定,正如Jon已经说过的,你真的应该考虑缓存一次性对象的方法。这会给你带来很多麻烦。为什么需要缓存它们?