信息
您所需的主题如下所示。但此主题未包含在此库中。

Exception.InnerException 属性

2013/12/13

获取导致当前异常的 Exception 实例。

Namespace:  System
程序集:  mscorlib(位于 mscorlib.dll 中)

public Exception InnerException { get; }

属性值

类型: System.Exception
一个 Exception 实例,描述导致当前异常的错误。InnerException 属性返回与传递给构造函数的值相同的值,或者,如果没有向构造函数提供内部异常值,则返回 null 引用(Visual Basic 中为 Nothing)。此属性为只读。

当异常 X 作为以前的异常 Y 的直接结果发生时,XInnerException 属性应当包含对 Y 的引用。

使用 InnerException 属性获得导致当前异常的异常集。

您可以创建对以前的异常进行捕捉的新异常。处理第二个异常的代码可利用前一个异常的其他信息更适当地处理错误。

假定有一个可以读取文件并格式化该文件中数据的函数。在此示例中,当代码尝试读取文件时引发 IOException。该函数捕捉 IOException 并引发 FileNotFoundExceptionIOException 可以保存在 FileNotFoundExceptionInnerException 属性中,从而使捕捉 FileNotFoundException 的代码可以检查导致初始错误的原因。

保存对内部异常引用的 InnerException 属性在初始化异常对象时设置。

下面的示例演示引发和捕捉引用内部异常的异常。

说明注意:

要运行此示例,请参见生成具有静态 Windows Phone TextBlock 控件的示例


using System;
public class Example
{
    public static void Demo(System.Windows.Controls.TextBlock outputBlock)
    {
        ExceptExample testInstance = new ExceptExample();
        try
        {
            testInstance.CatchInner();
        }
        catch (Exception e)
        {
            outputBlock.Text += String.Format("Exceptino caught: {0}", e.Message) + "\n";
            outputBlock.Text += String.Format("Inner Exception is {0}", e.InnerException) + "\n";
        }
    }
}

public class MyException : ArgumentException
{
    public MyException(String message)
        : base(message)
    { }
    public MyException(String message, Exception inner) : base(message, inner) { }
}
public class ExceptExample
{
    public void ThrowInner()
    {
        throw new MyException("MyException inner exception");
    }
    public void CatchInner()
    {
        try
        {
            this.ThrowInner();
        }
        catch (Exception e)
        {
            throw new MyException("Error caused by trying ThrowInner.", e);
        }
    }
}


此代码的输出如下:

In Main
  catch block. Caught: Error caused by trying ThrowInner. Inner Exception is
  MyAppException: ExceptExample inner exception at ExceptExample.ThrowInner() at
  ExceptExample.CatchInner()

Windows Phone OS

受以下版本支持: 8.0, 7.1, 7.0

Windows Phone

显示: