[英]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.