zoukankan      html  css  js  c++  java
  • 也说说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
  • 相关阅读:
    服务管理器
    自动启动管理器
    进程管理器
    进程模块查看器
    无DLL远程注入
    远程DLL注入
    U盘免疫
    WSAAsyncSelect Demo
    select Demo
    校正系统时间
  • 原文地址:https://www.cnblogs.com/kaima/p/675237.html
Copyright © 2011-2022 走看看