c# - 流是否在 try/catch 语句中自动处理?

标签 c# .net try-catch

如果我在 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/

相关文章:

node.js - Nodejs 表达 try-catch 与 then catch

r - 如果出错,则在 R 中的 for 循环中进行下一次迭代

c# - 多个 Where Linq 查询

c# - 是否有一种简洁的内置方法可以通过索引获取列表项而不会引发异常?

C#错误处理问题

.net - CLR内存消耗问题

c# - CreateFile、FILE_FLAG_BACKUP_SEMANTICS、目录管理和句柄

c#创建一个不需要输入默认参数的方法

c# - 获取类型的继承树

c# - ConditionalWeakTable 的值会导致内存泄漏吗?