Exception.InnerException Propriedade
Definição
public:
property Exception ^ InnerException { Exception ^ get(); };
public Exception InnerException { get; }
member this.InnerException : Exception
Public ReadOnly Property InnerException As Exception
Valor da propriedade
Um objeto que descreve o erro que causou a exceção atual.An object that describes the error that caused the current exception. A propriedade InnerException retornará o mesmo valor passado para o construtor Exception(String, Exception), ou null
, se o valor de exceção interno não foi fornecido para o construtor.The InnerException property returns the same value as was passed into the Exception(String, Exception) constructor, or null
if the inner exception value was not supplied to the constructor. Esta propriedade é somente para leitura.This property is read-only.
Implementações
Exemplos
O exemplo a seguir demonstra como lançar e capturar uma exceção que faz referência a uma exceção interna.The following example demonstrates throwing and catching an exception that references an inner exception.
using namespace System;
public ref class AppException: public Exception
{
public:
AppException(String^ message ) : Exception(message)
{}
AppException(String^ message, Exception^ inner) : Exception(message, inner)
{}
};
public ref class Example
{
public:
void ThrowInner()
{
throw gcnew AppException("Exception in ThrowInner method.");
}
void CatchInner()
{
try {
this->ThrowInner();
}
catch (AppException^ e) {
throw gcnew AppException("Error in CatchInner caused by calling the ThrowInner method.", e);
}
}
};
int main()
{
Example^ ex = gcnew Example();
try {
ex->CatchInner();
}
catch (AppException^ e) {
Console::WriteLine("In catch block of Main method.");
Console::WriteLine("Caught: {0}", e->Message);
if (e->InnerException != nullptr)
Console::WriteLine("Inner exception: {0}", e->InnerException);
}
}
// The example displays the following output:
// In catch block of Main method.
// Caught: Error in CatchInner caused by calling the ThrowInner method.
// Inner exception: AppException: Exception in ThrowInner method.
// at Example.CatchInner()
using System;
public class AppException : Exception
{
public AppException(String message) : base (message)
{}
public AppException(String message, Exception inner) : base(message,inner) {}
}
public class Example
{
public static void Main()
{
Example ex = new Example();
try {
ex.CatchInner();
}
catch(AppException e) {
Console.WriteLine ("In catch block of Main method.");
Console.WriteLine("Caught: {0}", e.Message);
if (e.InnerException != null)
Console.WriteLine("Inner exception: {0}", e.InnerException);
}
}
public void ThrowInner ()
{
throw new AppException("Exception in ThrowInner method.");
}
public void CatchInner()
{
try {
this.ThrowInner();
}
catch (AppException e) {
throw new AppException("Error in CatchInner caused by calling the ThrowInner method.", e);
}
}
}
// The example displays the following output:
// In catch block of Main method.
// Caught: Error in CatchInner caused by calling the ThrowInner method.
// Inner exception: AppException: Exception in ThrowInner method.
// at Example.CatchInner()
Public Class AppException : Inherits Exception
Public Sub New(message As String)
MyBase.New(message)
End Sub
Public Sub New(message As String, inner As Exception)
MyBase.New(message, inner)
End Sub
End Class
Public Class Example
Public Shared Sub Main()
Dim testInstance As New Example()
Try
testInstance.CatchInner()
Catch e As AppException
Console.WriteLine ("In catch block of Main method.")
Console.WriteLine("Caught: {0}", e.Message)
If e.InnerException IsNot Nothing Then
Console.WriteLine("Inner exception: {0}", e.InnerException)
End If
End Try
End Sub
Public Sub ThrowInner()
Throw New AppException("Exception in ThrowInner method.")
End Sub
Public Sub CatchInner()
Try
Me.ThrowInner()
Catch e As AppException
Throw New AppException("Error in CatchInner caused by calling the ThrowInner method.", e)
End Try
End Sub
End Class
' The example displays the following output:
' In catch block of Main method.
' Caught: Error in CatchInner caused by calling the ThrowInner method.
' Inner exception: AppException: Exception in ThrowInner method.
' at Example.CatchInner()
Comentários
Quando uma exceção X
é gerada como um resultado direto de uma exceção anterior Y
, a InnerException propriedade de X
deve conter uma referência a Y
.When 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 a InnerException propriedade para obter o conjunto de exceções que levaram à exceção atual.Use the InnerException property to obtain the set of exceptions that led to the current exception.
Você pode criar uma nova exceção que captura uma exceção anterior.You can create a new exception that catches an earlier exception. O código que manipula a segunda exceção pode usar as informações adicionais da exceção anterior para manipular o erro mais adequadamente.The code that handles the second exception can make use of the additional information from the earlier exception to handle the error more appropriately.
Suponha que haja uma função que lê um arquivo e formata os dados desse arquivo.Suppose that there is a function that reads a file and formats the data from that file. Neste exemplo, como o código tenta ler o arquivo, um IOException é lançado.In this example, as the code tries to read the file, an IOException is thrown. A função captura IOException e gera um FileNotFoundException .The function catches the IOException and throws a FileNotFoundException. O IOException pode ser salvo na InnerException Propriedade do FileNotFoundException , habilitando o código que captura o FileNotFoundException para examinar a causa do erro inicial.The IOException could be saved in the InnerException property of the FileNotFoundException, enabling the code that catches the FileNotFoundException to examine the cause of the initial error.
A InnerException propriedade, que mantém uma referência à exceção interna, é definida na inicialização do objeto de exceção.The InnerException property, which holds a reference to the inner exception, is set upon initialization of the exception object.