繁体   English   中英

从使用块抛出异常

[英]Exception throw from a using block

我有以下代码:

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

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

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

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

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块与在.Dispose()调用.Dispose()方法相同。 .Dispose()在StreamReader调用.Close()

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

... 是相同的 ...

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM