什么是内部异常

use*_*236 24 .net c# exception inner-exception

我已阅读MSDN但我无法理解这个概念.

如果我错了,纠正我,

当前异常将使用innerexception.

首先发生内部异常,然后发生当前异常(如果有异常),这InnerException就是检查的原因null.为了保留内部异常,我们必须将其作为参数传递.

我对吗?

小智 28

你可以看到下面的代码.

第一步,我将"abc"解析为整数.它会引发FormatException.

在catch块中,我尝试打开文本文件以记录异常消息.但是这个文件不存在.将引发FileNotFoundException.

我想知道是什么引发了第二个异常,所以我将第一个异常(或FormatException)添加到第二个异常的构造函数中.

现在第一个异常是InnerException的第二个异常.

在catch块中,我可以访问InnerException属性以了解第一个异常是什么.

它有用吗?

using System;
using System.IO;
public class Program
{
    public static void Main( )
    {
        try
        {
            try
            {
                var num = int.Parse("abc");                
            }
            catch ( Exception inner )
            {
                try
                {
                    var openLog = File.Open("DoesNotExist", FileMode.Open);
                }
                catch
                {
                    throw new FileNotFoundException("OutterException", inner);
                }                              
            }
        }
        catch ( Exception e)
        {
            string inMes, outMes;
            if (e.InnerException != null)
                inMes = e.InnerException.Message;
            outMes = e.Message;
        }        
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 怎能外深内浅呢?难道不应该反过来吗? (2认同)

Vic*_*aci 16

内部异常是导致当前异常的异常.

它用于您想要表示与您的代码捕获的异常不同的异常但您不想丢弃原始上下文的情况.

为了让新异常获得有关前一个异常的信息,就像你说的那样,你将它作为构造函数参数传递给新的异常.

通常,null内部异常意味着当前异常是异常情况的根本原因.