Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês

Propriedade Exception.InnerException

 

Obtém a instância Exception que causou a exceção atual.

Namespace:   System
Assembly:  mscorlib (em mscorlib.dll)

public Exception InnerException { get; }

Valor da Propriedade

Type: System.Exception

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.

Quando uma exceção X é gerada como um resultado direto de uma exceção anterior Y, o InnerException propriedade X deve conter uma referência a Y.

Use o InnerException propriedade para obter o conjunto de exceções que levou a exceção atual.

Você pode criar uma nova exceção que captura uma exceção anterior. O código que alças que a segunda exceção pode fazer usam das informações adicionais da exceção anterior para tratar o erro mais adequadamente.

Suponha que há uma função que lê um arquivo e formata os dados desse arquivo. Neste exemplo, como o código tenta ler o arquivo, um IOException é gerada. A função de captura o IOException e lança um FileNotFoundException. O IOException poderão ser salvos no InnerException propriedade o FileNotFoundException, permitindo que o código que captura o FileNotFoundException para examinar a causa do erro inicial.

O InnerException , que contém uma referência à exceção interna, é definida na inicialização do objeto de exceção.

O exemplo a seguir demonstra o lançamento e captura uma exceção que faz referência a uma exceção interna.

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()

Plataforma Universal do Windows
Disponível desde 8
.NET Framework
Disponível desde 1.1
Biblioteca de Classes Portátil
Com suporte no: plataformas portáteis do .NET
Silverlight
Disponível desde 2.0
Windows Phone Silverlight
Disponível desde 7.0
Windows Phone
Disponível desde 8.1
Retornar ao início
Mostrar: