C# Note34: 异常机制相关小点
1.使用throw和throw ex抛出异常的区别
通常,我们使用try/catch/finally语句块来捕获异常,那么在抛出异常的时候,使用throw和throw ex有什么区别呢?
假如,按顺序调用以下几个方法:
- 在Main方法中调用Method1方法,try/catch捕获异常
- 在Method1方法中调用Method2方法,try/catch捕获异常
- 在Method2方法中故意抛出异常,try/catch捕获异常
使用throw抛出异常:
static void Main(string[] args)
{
try
{
Method1();
}
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace.ToString()); }
Console.ReadKey();
}
static void Method1()
{
try
{
Method2();
}
catch (Exception ex)
{
throw;
}
}
static void Method2()
{
try
{
throw new Exception("来自方法2的异常");
}
catch (Exception ex)
{
throw;
}
}
结果表明:使用throw抛异常,会把发生在Method2方法、Method1方法和Main方法中的异常全部抛了出来。
如果在Method1方法中,改用throw ex抛出异常,则只会把Method1方法和Main方法中的异常抛出来。
总结:获取最完整的StackTrace信息,请使用throw抛出异常,这样可以知道异常到底来自哪个方法。
可参考:Is there a difference between “throw” and “throw ex”?
C# Note34: 异常机制相关小点的更多相关文章
- 【转载】C++异常机制的学习
参考了这篇文章:http://blog.chinaunix.net/uid-24517549-id-4079174.html 关于线程 进程和线程的概念相信各位看官早已耳熟能详.在这里,我只想带大家回 ...
- AssetBundle机制相关资料收集
原地址:http://www.cnblogs.com/realtimepixels/p/3652075.html AssetBundle机制相关资料收集 最近网友通过网站搜索Unity3D在手机及其他 ...
- [转载]C++异常机制的实现方式和开销分析
原文章网址:http://baiy.cn/doc/cpp/inside_exception.htm C++异常机制的实现方式和开销分析 白杨 http://baiy.cn 在我几年前开始写<C+ ...
- C++异常机制的实现方式和开销分析
C++异常机制的实现方式和开销分析 白杨 http://baiy.cn http://baiy.cn/doc/cpp/inside_exception.htm 在我几年前开始写<C++编码规范与 ...
- (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
1.Map集合(重点)1.1 常用的方法 Set<Map.Entry<K,V>> entrySet() - 用于将Map集合转换为Set集合. 其中Map.Entry<K ...
- C++异常机制的实现方式和开销分析 (大图,编译器会为每个函数增加EHDL结构,组成一个单向链表,非常著名的“内存访问违例”出错对话框就是该机制的一种体现)
白杨 http://baiy.cn 在我几年前开始写<C++编码规范与指导>一文时,就已经规划着要加入这样一篇讨论 C++ 异常机制的文章了.没想到时隔几年以后才有机会把这个尾巴补完 :- ...
- Java笔记 - 异常机制
JAVA异常机制是Java提供的用于处理程序在运行期可能出现的异常事件(如数组下标越界.文件不存在等)的一种机制,使程序不会因为 异常的发生 而 阻断或产生不可预见的结果 .而且还可以将逻辑代码与错误 ...
- Java核心知识体系3:异常机制详解
1 什么是异常 异常是指程序在运行过程中发生的,由于外部问题导致的运行异常事件,如:文件找不到.网络连接失败.空指针.非法参数等. 异常是一个事件,它发生在程序运行期间,且中断程序的运行. Java ...
- Java异常机制
Java异常分类 异常表明程序运行发生了意外,导致正常流程发生错误,例如数学上的除0,打开一个文件但此文件实际不存在,用户输入非法的参数等.在C语言中我们处理这类事件一般是将其与代码正常的流程放在一起 ...
随机推荐
- Java中String对象两种赋值方式的区别
本文修改于:https://www.zhihu.com/question/29884421/answer/113785601 前言:在java中,String有两种赋值方式,第一种是通过“字面量”赋值 ...
- linux学习笔记整理(一)
第二章 Linux基本操作 2.1 Linux网络相关概念和修改IP地址的方法2.2 关闭防火墙并设置开机开不启动2.3 临时和永久关闭Selinux2.4 设置系统光盘开机自动挂载2.5 配置本地 ...
- focus()无效问题
我想点击弹出一个控件的时候控件里的input自动获取焦点,INPUT的class为"group-input",可用下面的写法不行: document.queryselect(&qu ...
- [ZJOI2011]礼物
嘟嘟嘟 正是因为有这样的数据范围,解法才比较暴力. 我们假设取出的长方体常和宽相等,即\(a * a * b\).这样我们每次换两条边相等,搞三次就行. 那么对于第\(k\)层中的第\((i, j)\ ...
- Python:Day43 抽屉
1.关于inline-block和float的理解 inline-block和float都可以实现块级标签放在同一行上,inline不好设置左右对齐,只能通过margin和padding调节.而flo ...
- Docker下载mysql镜像
1.使用命令查看mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL [OK] mariadb MariaDB [OK] mysql/ ...
- docker 3 docker安装
centos docker安装 docker支持以下centos版本: centos 7 (64-bit) centos 6.5 (64-bit)或更高的版本 前提条件 目前,centos仅发行版中的 ...
- Spring Boot设置上传文件大小
可以使用配置文件配置,也可以使用Bean在启动类中配置 配置文件为application.properties格式: spring.http.multipart.maxFileSize=10Mb sp ...
- 4939-Agent2-洛谷
传送门 emm... 这次没有原题了 (因为我懒) 就是一道很简单的树状数组 真的很简单很简单 只用到了一点点的差分 注意注意: 只用树状数组,不用差分会t掉的 所以.. 我不仅t了 还wa了 emm ...
- Generative Adversarial Nets[Vanilla]
引言中已经较为详细的介绍了GAN的理论基础和模型本身的原理.这里主要是研读Goodfellow的第一篇GAN论文. 0. 对抗网络 如引言中所述,对抗网络其实就是一个零和游戏中的2人最小最大游戏,主要 ...