从使用块抛出异常

时间:2012-03-14 20:35:43

标签: c#

我有以下代码:

try{
    using (StreamReader reader = new StreamReader(...), Encoding.ASCII)){
        // Code that can throw an exception
    }
}catch (Exception error){
    // Display error...
}

如果StreamReader块内发生异常,using会发生什么?

我应该在关闭流的地方添加finally子句吗?

4 个答案:

答案 0 :(得分:11)

StreamReader将由使用自动处理,因为它本质上是一个嵌套的try / finally:

try{
    StreamReader reader =  new StreamReader(...), Encoding.ASCII);
    try {
        // Code that can throw an exception     
    } finally {
        reader.Dispose();
    }
} catch (Exception error) {
    // Display error...
}

答案 1 :(得分:3)

  

我应该在关闭流的地方添加finally子句吗?

不,内部using() {}(实质上是一个尝试/最后)照​​顾读者。

这段代码基本上没问题。

答案 2 :(得分:3)

using块与在finally中调用.Dispose()方法相同。 StreamReader上的.Dispose()调用.Close()

using (var reader = new StreamReader(...)) {
    //do work
}

...与...相同

var reader = new StreamReader(...);
try {
    //do work
}
finally {
    reader.Dispose();
}

答案 3 :(得分:2)

StreamReader将被处理掉。你的代码很好。