我有以下的方法,該方法返回一個XmlReader
:通過處置方法返回一個XmlReader底層的MemoryStream
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
中的工作,但是這種設計看起來有點尷尬。另外,I can't just call WebClient.DownloadString()
。
爲什麼不用你在內部使用 –
@Dan聲明XmlReader xReader,這沒有什麼區別。重點在於'XmlReader'在'RequestXML'之外消耗。話雖如此,'MemoryStream.Dispose()'並沒有真正做任何事情,所以海事組織的問題有點沒有實際意義。 –