0

私は:を返す次のメソッドを持っています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>内で作業を行うためのメソッドの2番目の引数としてデリゲート(または)を受け入れることを検討しましたusingが、その設計は少し厄介なようです。

また、私はただ呼び出すことはできませんWebClient.DownloadString()

4

1 に答える 1

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

于 2013-02-06T00:26:15.127 に答える