次の方法で共有


Exception.InnerException プロパティ

現在の例外を発生させた Exception インスタンスを取得します。

Public ReadOnly Property InnerException As Exception
[C#]
public Exception InnerException {get;}
[C++]
public: __property Exception* get_InnerException();
[JScript]
public function get InnerException() : Exception;

プロパティ値

現在の例外を発生させたエラーを説明する Exception のインスタンス。 InnerException プロパティは、コンストラクタに渡されたものと同じ値を返します。ただし、内部例外の値がコンストラクタに渡されなかった場合は、null 参照 (Visual Basic の場合は Nothing) を返します。このプロパティは読み取り専用です。

解説

ある例外 X が先に発生した例外 Y の直接の結果としてスローされるとき、 XInnerException プロパティには Y への参照が格納されます。

InnerException プロパティを使用して、現在の例外の原因になった例外のセットを取得します。

以前の例外をキャッチする新しい例外を作成できます。後に発生した例外を処理するコードは、先に発生した例外からの追加情報を使用して、より的確にエラーを処理できます。

ファイルを読み取り、そのファイルのデータの書式を指定する関数があるとします。この例では、ファイルの読み取りを試みるコードとして、 IOException がスローされます。この関数は、 IOException を受け取り、 FileNotFoundException をスローします。 IOExceptionFileNotFoundExceptionInnerException プロパティに保存でき、それにより、初期エラーの原因を検査するための FileNotFoundException を受け取るコードが有効になります。

内部例外への参照を保持する InnerException プロパティは、例外オブジェクトの初期化時に設定されます。

使用例

[Visual Basic, C#, C++] 内部例外を参照する例外をスローしたり受け取る例を次に示します。

 
Imports System

Public Class MyAppException
   Inherits ApplicationException
   
   Public Sub New(message As [String])
      MyBase.New(message)
   End Sub 'New
   
   Public Sub New(message As [String], inner As Exception)
      MyBase.New(message, inner)
   End Sub 'New
End Class 'MyAppException

Public Class ExceptExample
   
   Public Sub ThrowInner()
      Throw New MyAppException("ExceptExample inner exception")
   End Sub 'ThrowInner
   
   Public Sub CatchInner()
      Try
         Me.ThrowInner()
      Catch e As Exception
         Throw New MyAppException("Error caused by trying ThrowInner.", e)
      End Try
   End Sub 'CatchInner
End Class 'ExceptExample

Public Class Test
   
   Public Shared Sub Main()
      Dim testInstance As New ExceptExample()
      Try
         testInstance.CatchInner()
      Catch e As Exception
         Console.WriteLine("In Main catch block. Caught: {0}", e.Message)
         Console.WriteLine("Inner Exception is {0}", e.InnerException)
      End Try
   End Sub 'Main
End Class 'Test

[C#] 
using System;
public class MyAppException:ApplicationException 
{
   public MyAppException (String message) : base (message) 
   {}
   public MyAppException (String message, Exception inner) : base(message,inner) {}    
   }
public class ExceptExample 
{
   public void ThrowInner () 
   {
   throw new MyAppException("ExceptExample inner exception");
   }
   public void CatchInner() 
   {
      try 
      {
      this.ThrowInner();
      }
         catch (Exception e) 
         {
         throw new MyAppException("Error caused by trying ThrowInner.",e);
         }
      }
   }
public class Test 
{
   public static void Main() 
   {
   ExceptExample testInstance = new ExceptExample();
      try 
      {
      testInstance.CatchInner();
      }
         catch(Exception e) 
         {
         Console.WriteLine ("In Main catch block. Caught: {0}", e.Message);
         Console.WriteLine ("Inner Exception is {0}",e.InnerException);
         }
      }
}

[C++] 
#using <mscorlib.dll>

using namespace System;

public __gc class MyAppException : public ApplicationException {
public:
   MyAppException (String* message) : ApplicationException (message) {}
   MyAppException (String* message, Exception* inner) : ApplicationException(message, inner) {}
};

public __gc class ExceptExample {
public:
   void ThrowInner () {
      throw new MyAppException(S"ExceptExample inner exception");
   }
   void CatchInner() {
      try {
         this->ThrowInner();
      } catch (Exception* e) {
         throw new MyAppException(S"Error caused by trying ThrowInner.", e);
      }
   }
};

int main() {
   ExceptExample* testInstance = new ExceptExample();
   try {
      testInstance->CatchInner();
   } catch (Exception* e) {
      Console::WriteLine (S"In Main catch block. Caught: {0}", e->Message);
      Console::WriteLine (S"Inner Exception is {0}", e->InnerException);
   }
}

[Visual Basic, C#, C++] このコードによって、次の出力が生成されます。

[Visual Basic, C#, C++] In Main catch block. Caught: Error caused by trying ThrowInner. Inner Exception is MyAppException: ExceptExample inner exception at ExceptExample.ThrowInner() at ExceptExample.CatchInner()

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard

参照

Exception クラス | Exception メンバ | System 名前空間