我有以下方法返回XmlReader
:
public XmlReader RequestXML(string endpoint)
{
using (WebClient request = this.PrepareRequest(RestMethod.GET, null))
{
byte[] response = request.DownloadData(this.RestUrl + endpoint);
using (MemoryStream responseStream = new MemoryStream(response))
{
XmlReader xReader = XmlReader.Create(responseStream);
return xReader;
}
}
}
但是,当然,这不起作用,因为MemoryStream
在调用代码有机会使用XmlReader
之前关闭。是否可以返回XmlReader
并仍然处置其基础MemoryStream
?
我考虑过接受一个委托(或Action<XmlReader>
)作为我的方法中的第二个参数来完成using
内的工作,但这个设计看起来有点尴尬。
答案 0 :(得分:2)
如果有疑问,请使用XmlReaderSettings.CloseInput
进行此重载:XmlReader.Create(Stream, XmlReaderSettings)
,就像这样...
public XmlReader RequestXML(string endpoint)
{
using (WebClient request = this.PrepareRequest(RestMethod.GET, null))
{
byte[] response = request.DownloadData(this.RestUrl + endpoint);
MemoryStream responseStream = new MemoryStream(response);
XmlReaderSettings xmlReaderSettings = new XmlReaderSettings();
xmlReaderSettings.CloseInput = true;
return XmlReader.Create(responseStream, xmlReaderSettings);
}
}
这样调用RequestXml
的代码无需负责处理MemoryStream
。