我有以下代码:
try{
using (StreamReader reader = new StreamReader(...), Encoding.ASCII)){
// Code that can throw an exception
}
}catch (Exception error){
// Display error...
}
如果StreamReader
块内发生异常,using
会发生什么?
我应该在关闭流的地方添加finally
子句吗?
答案 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
将被处理掉。你的代码很好。