Exception.InnerException Property
Gets the Exception instance that caused the current exception.
Assembly: mscorlib (in mscorlib.dll)
Property Value
Type: System.ExceptionAn instance of Exception that describes the error that caused the current exception. The InnerException property returns the same value as was passed into the constructor, or a null reference (Nothing in Visual Basic) if the inner exception value was not supplied to the constructor. This property is read-only.
Implements
_Exception.InnerExceptionWhen an exception X is thrown as a direct result of a previous exception Y, the InnerException property of X should contain a reference to Y.
Use the InnerException property to obtain the set of exceptions that led to the current exception.
You can create a new exception that catches an earlier exception. The code that handles the second exception can make use of the additional information from the earlier exception to handle the error more appropriately.
Suppose that there is a function that reads a file and formats the data from that file. In this example, as the code tries to read the file, an IOException is thrown. The function catches the IOException and throws a FileNotFoundException. The IOException could be saved in the InnerException property of the FileNotFoundException, enabling the code that catches the FileNotFoundException to examine what causes the initial error.
The InnerException property, which holds a reference to the inner exception, is set upon initialization of the exception object.
The following example demonstrates throwing and catching an exception that references an inner exception.
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
This code has the following output:
In Main catch block. Caught: Error caused by trying ThrowInner. Inner Exception is MyAppException: ExceptExample inner exception at ExceptExample.ThrowInner() at ExceptExample.CatchInner()
Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.