zoukankan      html  css  js  c++  java
  • 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抛出异常,从中可以知道异常到底来自哪个方法。

  • 相关阅读:
    滚动菜单BUG修复
    前端之滚动菜单
    数据仓库操作
    mysql之分页与慢日志以及表知识补充
    mysql之索引
    mysql之内置函数
    mysql之触发器与事务
    pymysql操作数据库之存储过程
    复习mysql语句
    经典mysql测试题
  • 原文地址:https://www.cnblogs.com/darrenji/p/4521886.html
Copyright © 2011-2022 走看看