Exception.InnerException Propriedade
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Obtém a instância Exception que causou a exceção atual.
public:
property Exception ^ InnerException { Exception ^ get(); };
public Exception InnerException { 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. 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. Esta propriedade é somente para leitura.
Implementações
Exemplos
O exemplo a seguir demonstra a geração e captura de uma exceção que faz referência a uma exceção interna.
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.ThrowInner()
// 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.ThrowInner()
// at Example.CatchInner()
open System
type AppException =
inherit Exception
new (message: string) = { inherit Exception(message) }
new (message: string, inner) = { inherit Exception(message, inner) }
let throwInner () =
raise (AppException "Exception in throwInner function.")
()
let catchInner () =
try
throwInner ()
with :? AppException as e ->
raise (AppException("Error in catchInner caused by calling the throwInner function.", e) )
[<EntryPoint>]
let main _ =
try
catchInner ()
with :? AppException as e ->
printfn "In with block of main function."
printfn $"Caught: {e.Message}"
if e.InnerException <> null then
printfn $"Inner exception: {e.InnerException}"
0
// The example displays the following output:
// In with block of main function.
// Caught: Error in catchInner caused by calling the throwInner function.
// Inner exception: Example+AppException: Exception in throwInner function.
// at Example.throwInner()
// 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.ThrowInner()
' at Example.CatchInner()
Comentários
Quando uma exceção X
é lançada como resultado direto de uma exceção Y
anterior, a InnerException propriedade deve X
conter uma referência a Y
.
Use a InnerException propriedade para obter o conjunto de exceções que levou à exceção atual.
Você pode criar uma nova exceção que captura uma exceção anterior. O código que manipula a segunda exceção pode usar as informações adicionais da exceção anterior para lidar com o erro de forma mais adequada.
Suponha que haja uma função que lê um arquivo e formate os dados desse arquivo. Neste exemplo, enquanto o código tenta ler o arquivo, um IOException é gerado. A função captura e IOException gera um FileNotFoundException. Pode IOException ser salvo na InnerException propriedade do FileNotFoundException, permitindo que o código que captura a FileNotFoundException causa do erro inicial seja examinado.
A InnerException propriedade, que contém uma referência à exceção interna, é definida após a inicialização do objeto de exceção.