Gaz*_*yer 0 c# exception-handling using
using语句不捕获异常.要捕获异常,您有两种选择:
1)打开使用并手动实现:
void MyFunc()
{
StreamReader myReader = null;
try
{
myReader = new StreamReader(path);
//use myReader
}
catch (Exception e)
{
//do something with exception
}
finally
{
if (myReader != null)
myReader.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
或2)保持使用,并将其包装在另一个try catch块中
void MyFunc()
{
try
{
using (StreamReader myReader = new StreamReader(path))
{
//use myReader
}
}
catch (Exception e)
{
//do something with exception
}
}
Run Code Online (Sandbox Code Playgroud)
对我来说,第二个看起来更整洁,特别是当你有多个using语句时,因为它更好地描述了流,并删除了显式声明,空检查和Dispose()调用.
但是,由于额外的尝试捕获开销有效地冗余,因此感觉不对.
什么是标准做法?
异常处理结构的开销只是元数据.如果没有抛出异常,则没有运行时性能开销.与其他一些运行时不同,进入/离开异常处理条款在.net中是免费的.抛出异常时,运行时使用元数据和当前指令指针来确定要执行的处理子句.
我赞成第二个.释放资源和处理异常是不同的概念,因此它们在代码中分开是很自然的.
| 归档时间: |
|
| 查看次数: |
259 次 |
| 最近记录: |