• (转) 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;
    
                }
    
            }
    

    1

    可以看到,使用throw抛异常,把发生在Method2方法、Method1方法和Main方法中的异常全部抛了出来。


    使用throw ex抛出异常

     

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


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

    2  

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

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

    **转自:
    C#中使用throw和throw ex抛出异常的区别 - Darren Ji - 博客园
    http://www.cnblogs.com/darrenji/p/4521886.html **

  • 相关阅读:
    SQL 语言入门
    [转载]Sql Server 中的Login,Schema,User,Role之间的关系
    稀疏矩阵运算
    特征缩放的几种方法
    dp解出栈序列数
    神经网络解决多分类问题例:数字识别
    多分类例题
    fminunc 函数的用法
    二分类
    特征归一化、特征映射、正则化
  • 原文地址:https://www.cnblogs.com/jyfootprint/p/9919093.html
Copyright © 2020-2023  润新知