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抛出异常,从中可以知道异常到底来自哪个方法。

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

  • 相关阅读:
    vi/vim 文字处理器常用命令
    图片在容器里水平垂直居中
    谁的属性值优先被访问
    创建对象和实例
    碎碎念css
    未整理js
    表格<table>
    盒子模型
    Css文件目录结构
    链接文字<a>保持原有的字体颜色
  • 原文地址:https://www.cnblogs.com/jyfootprint/p/9919093.html
Copyright © 2011-2022 走看看