2013-10-01 50 views
0

好吧,讓我們說我有一個程序,它使WebRequest和獲得WebResponse,並使用該WebResponse的使用語句中的StreamReader,顯然會被處理後,但是什麼WebResponse流?例如:C#使用StreamReader,處理響應流

WebResponse response = request.GetResponse(); 
using(StreamReader reader = new StreamReader(response.GetResponseStream())) 
{ 
    x = reader.ReadToEnd(); 
} 

如此明顯的StreamReader的將得到安置後,傾注給它的所有資源,但如何響應流從反應?那是嗎?或者我應該做這樣的:

WebResponse response = request.GetResponse(); 
using(Stream stream = response.GetResponseStream()) 
{ 
    using(StreamReader reader = new StreamReader(stream)) 
    { 
     x = reader.ReadToEnd(); 
    } 
} 

感謝

+0

你可能會發現這個鏈接有趣:http://stackoverflow.com/questions/3973553/net-replacing-nested-using-statements-with-single-using-statement – varocarbas

回答

2

的StreamReader假設你傳遞給它的構造了數據流的所有權。換句話說,當你處理StreamReader對象時,它會自動處理你傳遞的Stream對象。這是非常方便,你想要什麼,代碼簡化到:

using (var response = request.GetResponse()) 
using (var reader = new StreamReader(response.GetResponseStream())) 
{ 
    x = reader.ReadToEnd(); 
} 
+0

完美回答我的問題,非常感謝。 – user2764359

0

當我使用Visual Studio 2013的代碼分析,它聲稱使用兩種「usings」在這裏會造成的Dispose()要在兩次打電話'響應'並將生成一個隱藏的'System.ObjectDisposedException'?

警告CA2202:Microsoft.Usage:對象'響應'可以在方法'xxx'中多次丟棄 。爲避免生成一個 System.ObjectDisposedException,您不應該在對象上調用Dispose超過 一次。

有沒有其他人看到過這個?