throw和throw ex的区别
我们都知道,C#中使用throw和throw ex抛出异常,但二者是有区别的。
在C#中推荐使用throw;来抛出异常;throw ex;会将到现在为止的所有信息清空,认为你catch到的异常已经被处理了,只不过处理过程中又抛出新的异常,从而找不到真正的错误源。
throw的用法主要有以下几种:
第一种(不推荐使用,可惜很多人都一直这么用的,包括俺,嘻嘻),这样适用会吃掉原始异常点,重置堆栈中的异常起始点:
try
{
}
catch (Exception ex)
{
throw ex;
}
第二种,可追溯到原始异常点,不过编译器会警告,定义的ex未有使用:
try
{
}
catch (Exception ex)
{
throw;
}
第三种,不带异常参数的,这个同第二种其实一样,可捕获所有类型的异常,IDE不会告警:
try
{
}
catch
{
throw;
}
其实第二种和第三种用法,书上也是不建议使用的,一般要从小粒度的异常捕获开始,采用多个catch语句,大家就见仁见智吧。。。
第四种:经过对异常重新包装,但是会保留原始异常点信息。推荐使用。
try
{
}
catch (Exception ex)
{
throw new Exception("经过进一步包装的异常", ex);
}
最新文章
- bzoj1723--前缀和(水题)
- 清空IE缓存
- java多线程系类:JUC原子类:02之AtomicLog原子类
- Struts2 框架下 session 读出来为null
- 蓝桥杯 入门训练 Fibonacci数列(水题,斐波那契数列)
- 初始化lpc2106开发工程
- CGCS2000 VS WGS84
- HDU5934 Bomb(2016杭州CCPC第二题)(强连通缩点)
- FreeSWITCH在呼叫失败的情况下播放语音提示
- Properties读取资源文件的四种方法
- anything vs everything
- 提示ORA-03113:通信通道的文件结尾解决
- Windows 7/8 自带定时关机命令
- Django Sqlite3 数据库向MySQL迁移
- 包含深度学习常用框架的Docker环境
- ORACLE行转列(行转1列,行转多列)
- JavaSE复习日记 : 抽象类
- Unity3D游戏开发之小地图的实现
- ASP.NET Identity 身份验证和基于角色的授权
- web实现数据交互的几种常见方式
热门文章
- Ubuntu 14.04.2 x64 安装tomcat服务器傻瓜教程
- 给WordPress Page页面添加摘要输入框
- 响应式js幻灯片代码一枚
- Highways(prim &; MST)
- Ubuntu 开机自启动工具 update-rd.d 使用详解
- Mysql函数集合
- digitalocean添加ssh_keys
- 使用virtualenv搭建独立的Python环境
- C++公有继承
- 73 [面试题]交换一个整数的二进制表示的奇偶位(swapOddEvenBits)