如果您遇到类似这样的带有嵌套 using 语句/资源的 C# 代码:
using (var response = (HttpWebResponse)request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
using (var reader = new BinaryReader(responseStream))
{
// do something with reader
}
}
}
用这样的东西替换它安全吗?
using (var reader = new BinaryReader(((HttpWebResponse)request.GetResponse()).GetResponseStream()))
{
// do something with reader
}
上面的例子只是嵌套一次性资源的一个例子,所以如果它的用法不完全正确,请原谅我。我很好奇,当您处置最外层资源(本例中为 BinaryReader)时,它是否会为您递归地处置其子级,或者您是否需要使用单独的 using 语句显式处置每个“层”?例如。如果您处置 BinaryReader,它是否应该处置响应流,进而处置响应?考虑最后一句话让我认为您实际上确实需要单独的 using 语句,因为无法保证包装器对象会处理内部对象。是对的吗?
您应该只堆叠您的 using 语句 - 它具有您正在寻找的所需效果:
using (var response = (HttpWebResponse)request.GetResponse())
using (var responseStream = response.GetResponseStream())
using (var reader = new BinaryReader(responseStream))
{
// do something with reader
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)