我是否必须将所有IDisposable对象包装在using(){}语句中,即使我只是将它们传递给另一个?例如,在以下方法中:
public static string ReadResponse(HttpWebResponse response)
{
string resp = null;
using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader responseReader = new StreamReader(responseStream))
{
resp = responseReader.ReadToEnd();
}
}
return resp;
}
Run Code Online (Sandbox Code Playgroud)
我可以将其合并到这样一个using:
public static string ReadResponse(HttpWebResponse response)
{
string resp = null;
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
resp = reader.ReadToEnd();
}
return resp;
}
Run Code Online (Sandbox Code Playgroud)
我能指望被处置者Stream和StreamReader被处置者吗?或者我必须使用两个using陈述?
Ser*_*rvy 12
是的,你可以,但那是因为StreamReader构造函数文档特别说:"当调用StreamReader.Dispose时,StreamReader对象在提供的Stream对象上调用Dispose."
如果没有,那么你可以做这样的事情来至少清理一下代码.
using (Stream responseStream = response.GetResponseStream())
using (StreamReader responseReader = new StreamReader(responseStream))
{
resp = responseReader.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)