0

次のように返すメソッドがあります。

using (var response = request.GetResponse())
using (var stream = response.GetResponseStream())
using (var reader = new StreamReader(stream))
    return reader.ReadToEnd();

このように 3 つの用途を組み合わせて、同じレベルの安全性を持つことはできますか?

using (var reader = new StreamReader(request.GetResponse().GetResponseStream()))
    return reader.ReadToEnd();

または、これはプライベート スコープの関数内にあるため、使用せずに安全に戻ることができますか?

return new StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd();

このメソッドを含むオブジェクトは ではありませんIDisposable。どちらの質問にもノーだと思いますが、他の観点に興味があります。

4

2 に答える 2

2

一般に、すべてが適切にクリーンアップされるようにするには、個別のステートメントが必要です。

using (var response = request.GetResponse())
using (var stream = response.GetResponseStream())
using (var reader = new StreamReader(stream))
    return reader.ReadToEnd();

そうしないと、途中でエラーが発生し、リソースが未処理のままになる可能性があります。たとえばGetResponseStream()、このコードで例外をスローした場合、未処理の応答が返されます。

using (var reader = new StreamReader(request.GetResponse().GetResponseStream()))
    return reader.ReadToEnd();
于 2013-11-06T17:59:06.307 に答える