如果您遇到过一些像这样的嵌套 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
}
关于c# - .NET - 用单个 using 语句替换嵌套的 using 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3973553/