C#中使用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方法中的异常全部抛了出来。

使用throw ex抛出异常

现在,在Method1方法中,使用throw ex抛出异常。

        static void Method1()
        {
            try
            {
                Method2();
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

可见, 使用throw ex抛异常,只会把Method1方法和Main方法中的异常抛出来。

总结:如果想获取最完整的StackTrace信息,使用throw抛出异常,从中可以知道异常到底来自哪个方法。

时间: 2024-07-28 13:50:00

C#中使用throw和throw ex抛出异常的区别的相关文章

JAVA中的throws和throw的区别

Java 一直对java中的throws和throw不太理解.最近一直在查这两个方面的资料,算是能明白一点吧.如果我下面的观点哪有不对,希望指出来,我加以改进. throw:(针对对象的做法) 抛出一个异常,可以是系统定义的,也可以是自己定义的.下面举两个例子: 抛出Java中的一个系统异常: public class One { public void yichang(){ NumberFormatException e = new NumberFormatException(); throw

Java中的throws与throw关键字

作者:苗老师,华清远见嵌入式学院讲师. Java中的异常处理还是比较有意思的!就是该你管就你管,不是你该管的,最好不要越级管理!不然我这级管理存在就没有意义! Java的异常处理是通过5个关键字来实现的:try,catch,throw,throws,finally.这里我主要说一下throw,throws. throws语句 throws总是出现在方法声明时,用来标明该成员方法可能抛出异常.如果是多个异常,使用逗号隔开.对大 多数Exception子类来说,Java 编译器会强迫你声明在一个成员

关于Java中try catch finally throw return的执行顺序问题

try {          normal statement;     //1.          exception occurred;   //2.          return "try";      } catch (Exception ex) {     normal statement;     //3.          return "catch";      } finally {          normal statement;     

throw和throw ex的区别

C#中使用throw和throw ex抛出异常,但二者是有区别的. 第一种(不推荐使用,可惜很多人都一直这么用的,包括俺,嘻嘻),这样适用会吃掉原始异常点,重置堆栈中的异常起始点: 1 try 2 { 3 } 4 catch (Exception ex) 5 { 6 throw ex; 7 } 第二种,可追溯到原始异常点,不过编译器会警告,定义的ex未有使用: 1 try 2 { 3 } 4 catch (Exception ex) 5 { 6 throw; 7 } 第三种,不带异常参数的,这个

c# throw和throw ex

原文:c# throw和throw ex c# throw和throw ex 我们在日常开发当中,经常会用到exception异常,并且我们会在exception中的catch块中throw exception,例如: static void M3() { try { //你的业务代码 } catch (Exception ex) { throw ex; } } 但是大家是否清楚在catch块中 throw和throw ex的区别呢?在一次电话面试中,面试官就问到这个问题了,当时没有答上来, 事

OC中关于给NSString 赋 nil和@""的区别

nil和NULL没有本质的区别都是代表空,nil是属于OC的风格,而NULL是C的风格. 举个例子 NSString *name = nil; 这句话代表着一个指向OC空实例的指针,可以认为这个实例变量是不存在的吧,在JAVA中这样的写法是直接抛出异常的. 而如下 NSString *name = @""; 这句话代表着创建了一个长度为0的字符串,@""和nil有着本质的区别. 所以判断一个字符串是否为空: if([name length] > 0) { //

C#中数组、ArrayList和List三者的区别

在C#中数组,ArrayList,List都能够存储一组对象,那么这三者到底有什么样的区别呢. 数组 数组在C#中最早出现的.在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单. [csharp] view plaincopy <span style="font-family:SimSun;font-size:18px;">//数组 string[] s=new string[2]; //赋值 s[0]="a"; s[1]=&quo

phpcms v9中 action=&quot;position&quot; 和action=&quot;lists&quot;有什么区别, 以及action 的属性和值

action值的含义: lists 内容数据(文章?)列表 relation 内容相关文章 hits 内容数据点击排行榜 category 内容栏目列表 position 内容推荐位列表 phpcms v9中 action="position" 和action="lists"有什么区别, 以及action 的属性和值,布布扣,bubuko.com

关于Java中this和super的用法介绍和区别

1.this&super 什么是this,this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针.当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象的某个成员,你便可以利用this来实现这个目的.要注意的是this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this.his也可作为构造函数来使用.在后面可以看到 而什么是super,可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类.super的作用同样是可