小智 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)
Vic*_*aci 16
内部异常是导致当前异常的异常.
它用于您想要表示与您的代码捕获的异常不同的异常但您不想丢弃原始上下文的情况.
为了让新异常获得有关前一个异常的信息,就像你说的那样,你将它作为构造函数参数传递给新的异常.
通常,null内部异常意味着当前异常是异常情况的根本原因.