首页 > 其他分享 >Exception.InnerException 属性的使用

Exception.InnerException 属性的使用

时间:2023-04-04 17:56:34浏览次数:36  
标签:DivideOperation Exception Divide ex 属性 异常 InnerException

例子(部分代码):

protected void Button3_Click(object sender, EventArgs e)
{
try
{
Divide(10,0);
}
catch (Exception ex)
{
Label3.Text = "产生的异常信息如下:<br/>";
Label3.Text += ex.Message + "<br/>";
////直接使用InnerException属性可以获取内部异常的信息
Label3.Text += ex.InnerException.Message;
}
}
//div方法将抛出其产生的异常, 并传递内部异常
private double Divide(int x, int y)
{
try
{
return DivideOperation(x, y);
}
catch (Exception ex)
{
//使用Exception重载的构造函数传递内部异常
throw new Exception("来自Divide方法的异常", ex);
}
}
////产生一个被0除的异常
private double DivideOperation(int x, int y)
{
try
{
return x / y;
}
catch (DivideByZeroException ex)
{
throw new DivideByZeroException("产生了一个试图除以零的异常, 来自DivideOperation方法!");
}
}

在Divide方法中,调用了DivideOperation方法,首先DivideOperation方法会抛出一个DivideByZero 
-Exception类型的异常,Divide方法将捕获该异常,但是Divide并不是直接吞没了该异常,而是抛出了一个异常,并将由DivideOperation方法产生的异常作为Exception构造函数的一个参数向外传递,这种传递异常的方式称为异常传递。当捕捉这种嵌套类型的异常时,开发人员可以使用Exception类的InnerException属性来获取内部异常的详细信息,这是一个Exception类型的属性

输出结果:

产生的异常信息如下:

来自Divide方法的异常

产生了一个试图除以零的异常, 来自DivideOperation方法!

 

遍历所有Exception.InnerException 属性的示例

public static class ExceptionExtensions
    {
        public static Exception GetOriginalException(this Exception ex)
        {
            if (ex.InnerException == null)
            {
                return ex;
            }
            else
            {
                return ex.InnerException.GetOriginalException();
            }
        }

        public static Exception GetAllExceptionInfo(this Exception ex, ref string message)
        {
            message += "|" + ex.Message;
            if (ex.InnerException == null)
            {
                return ex;
            }
            else
            {
                return ex.InnerException.GetAllExceptionInfo(ref message);
            }
        }
    }

 

标签:DivideOperation,Exception,Divide,ex,属性,异常,InnerException
From: https://www.cnblogs.com/itjeff/p/17287235.html

相关文章

  • 解决org.hibernate.LazyInitializationException的正确姿势
    转载:https://www.cnblogs.com/surging-dandelion/p/15085605.html 项目运行过程中,一个报错信息,报错信息如下:org.hibernate.LazyInitializationException:couldnotinitializeproxy[xxx.domain.Guild#CF12263C600F4BCABC9293D3FABE4B42]-noSessionatorg.hibernat......
  • 【Python】ini解析ERROR:没有实例属性‘__getintem__’
    abaquspython搭配ini时,出现AttributeError:ConfigParserinstancehasnoattribute'getitem'20230404edit情况错误代码:fromConfigParserimportConfigParserconf=ConfigParser()conf.read(IniFilePath)layupFile=conf['DampCal']['lay......
  • dubbo线程池又被打爆(打满)了java.util.concurrent.RejectedExecutionException: Thread
    转载:https://blog.csdn.net/kevin_mails/article/details/121764780?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-121764780-blog-124236206.235%5Ev27%5Epc_relevant_recovery_v2&depth_1-utm_sourc......
  • React父组件调用子组件属性和方法
    子组件暴露自身的属性和方法父组件使用ref绑定对应的子组件。调用即可类组件绑定ref示例importReactfrom'react'importChildfrom'./Child'exportdefaultclassParentextendsReact.Component{//...render(){return(<div><Childre......
  • 4.4 proxy 的一些属性
    varuser={id:1,name:'Tom',age:10,school:'primaryschool',sister:{name:'Alice',age:12}}varhandler={get(target,prop){if(prop=='id'){......
  • Android中的persistent属性
    在我们开发系统级的App时,很有可能就会用到persistent属性。当在AndroidManifest.xml中将persistent属性设置为true时,那么该App就会具有如下两个特性:在系统刚起来的时候,该App也会被启动起来该App被强制杀掉后,系统会重启该App。这种情况只针对系统内置的App,第三方安装的App不......
  • magento 获取产品的属性值
    magento采用强大的EAV设计方法,我们可以很方便的给商品添加任意数量的属性,那如何在前台获取这些属性值呢? magento同样提供了很方便的方式来读取它。使用$_product->getAttributeName()或者$_product['AttributeName']就可以获得指定名字属性的值,以颜色属性color为例,可以这样写 ......
  • ArcEngine|按属性查询
    按属性查询界面设计思路该属性查询界面思路如下:首先选择按属性查询方法,并打开功能界面;接着在“图层”下拉框中选择图层;图层选择好后,可从“字段”中选择该图层对应的查询字段,并可查看该字段的唯一值;使用按钮输入SQL查询语句,并可在下方的文本框中查看输入的SQL语句;命令编写完成......
  • Spring 类型转换详解,SpringBean创建时属性类型转换源码详解
    文章目录一、概述1、Spring类型转换的实现2、使用场景3、源码分析二、基于JavaBeans接口的类型转换1、代码实例2、Spring內建PropertyEditor扩展ByteArrayPropertyEditor3、自定义PropertyEditor扩展整合到springframework代码实例SpringPropertyEditor的设计缺陷三、Spr......
  • vue指令之属性指令
    目录属性指令示例属性指令标签上的属性可以绑定变量,变量变化,属性也会变化#什么是属性?比如:href/src/name/value/class/style...语法:v-bind:属性名="变量名"简写:属性名="变量名"示例<body><divid="app"><av-bind:href="url">点我</a>......