1

現在、いくつかのコードをリファクタリングしており、次の機能が見つかりました。

public static StreamReader DoWebRequest(string url, string method)
{
    HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;
    req.Method = method;
    req.Timeout = System.Threading.Timeout.Infinite;
    HttpWebResponse resp = req.GetResponse() as HttpWebResponse;
    return new StreamReader(resp.GetResponseStream());
}

以降

string result = Helper.DoWebRequest(ServerUrl, "GET").ReadToEnd();

私は多くのストリームを使用してきましたが、常にHttpWebResponse resp = req.GetResponse()リーダーを使用ブロックに入れたり、ストリーミングしたりしています。しかし、この特定のケースではどうすればよいですか?上記のコードは大丈夫ですか、それとも StreamReader を新しい変数に割り当てて、ReadToEnd(); の呼び出し後に明示的に閉じる方が良いですか? (または using ブロック内) 次のように:

using(StreamReader sr = Helper.DoWebRequest(ServerUrl, "GET"))
{
  string result = sr.ReadToEnd();
}

ありがとう

4

1 に答える 1

1

まあ、いつでも両方を行う別の関数を書くことができます:

public static String ReadToEndAndClose(this StreamReader stream)
{
    using(var sr = stream)
    {
        return sr.ReadToEnd();
    }
}
于 2013-06-10T08:38:51.223 に答える