从正在使用的块引发异常

本文关键字:异常 | 更新日期: 2023-09-27 18:27:53

我有以下代码:

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

如果从using块中抛出异常,StreamReader会发生什么?

我应该在关闭流的位置添加finally子句吗?

从正在使用的块引发异常

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

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

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

不,内在的using() {}(本质上是一次尝试/最终)照顾着读者。

这个代码基本上是可以的。

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

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

与…相同。。。

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

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