2013-10-01 49 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超过 一次。

有没有其他人看到过这个?