• 也说说C#的“异常重抛”


    几乎大多数C#程序员都这样写异常处理代码的

    代码一:
    1try
    2{ThrowException();}
    3catch(Exception ex)
    4{throw ex;}
    5finally
    6{}

    如果你的底层代码还有一个方法用来抛出异常
    代码二:
    1public ThrowException()
    2{
    3throw new Exception("一个底层异常");
    4}
    那么,你也许需要将这个底层的异常重新抛出

    如果你使用代码一的方式,将会打断异常的堆栈跟踪,在VS2005中的表现是新抛出了一个异常(代码一中的ex),而不是抛出底层异常(代码二中的new Exception("一个底层异常");)

    那么怎么才能不打断异常的堆栈跟踪并能重抛底层异常呢,可以这样写。
    代码三:
    1try
    2{
    3ThrowException();
    4}

    5catch
    6{
    7throw;
    8}
    这样就能重新抛出代码二中的底层异常。
    当然你可以包装一下底层异常。代码如下:
    代码四:
    try
    {
     ThrowException();
    }

    catch(Exception ex)
    {
     
    throw new Exception("被包装后的底层异常",ex);
    }
    这样不会打断异常堆栈跟踪。
    我的理解比较浅,多多指正。

    参考资料:http://www.cnblogs.com/1landonsea/archive/2005/01/15/RethrowExceptionInCSharp.html
  • 相关阅读:
    东坡诗词(选)
    网络编程_网络基础
    命名空间
    python常见报错类型和异常处理
    关于文件操作
    python支持的基本数据类型及其简单操作
    运算符
    python简介
    python实现简单四则运算计算器
    Memory barrier
  • 原文地址:https://www.cnblogs.com/kaima/p/675237.html
Copyright © 2020-2023  润新知