使用原则:
- 正常业务逻辑,不要使用异常来处理
- 不要总是尝试去捕获或引发异常,而应该允许异常向调用堆栈往上传播
- 只有在出现资源问题,严重错误时才引发异常
- 如果向用户抛出异常,最好包装一下,引发一个含有友好信息的新异常
- 抛出新异常,需要将原有异常附加进来,便于查错
在try finally中返回数据
- 若在try中返回值类型数据,则在finally中对数据的操作无效
- 若在try中返回引用类型数据,则在finally中对数据操作有效
- 建议在try finally之外返回数据,这样在finally中修改值类型,引用类型数据都会生效
异常嵌套
- 不恰当的异常嵌套,会导致打印出的堆栈不完整
- 不要在底层捕获不会处理的异常
- 在最上层捕获异常
// Wrong
try
{
Method1();
}
<font color=red>catch(Exception err)</font>
{
// 这里没有处理错误,而直接继续转发这个错误,会导致这之前堆栈信息丢失
<font color=red>throw err</font>;
}
// correct
try
{
Method1();
}
<font color=red>cache</font>
{
<font color=red>throw;</font>
}
捕获未处理的异常
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
static void CurrentDomain_UnhandleException(object sender, UnhandledExceptionEventArgs e)
{
}
使用自定义异常
- 方便调试
- 包装若干异常
- 便于调用者编码,根据业务划分异常
- 引入新异常类
网友评论