如果我在 try block 内创建一个流并引发异常,该流会自动被处理掉吗?例如:
try
{
Stream stream = response.GetResponseStream();
//Error Occurs
stream.Close();
}
catch
{
//Handle Error
}
如果这不是做到这一点的方法,您能否建议一种方法?
最佳答案
不,你需要使用finally
Stream stream;
try
{
stream = response.GetResponseStream();
//Error Occurs
}
catch
{
//Handle Error
}
finally
{
if(stream != null)
stream.Close();
}
或者,将您的 Stream
声明/定义包装在 using
语句中,该语句会自动调用 Close()
:
try
{
using(Stream stream = response.GetResponseStream())
{
//Error happens
}
//stream.Dispose(), which calls stream.Close(), is called by compiler here
}
catch
{
//Handle Error
}
请注意,我的两个示例完全不等价 - 在第一个示例中,异常在调用 steam.Close()
之前处理,在第二个示例中,异常是之后处理。
关于c# - 流是否在 try/catch 语句中自动处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6416416/