Esta página foi útil?
Seus comentários sobre este conteúdo são importantes. Queremos saber sua opinião.
Comentários adicionais?
1500 caracteres restantes
Exportar (0) Imprimir
Expandir Tudo
Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original

Classe Exception

Representa os erros que ocorrem durante a execução do aplicativo.

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

[SerializableAttribute]
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
public class Exception : ISerializable, _Exception

O tipo Exception expõe os membros a seguir.

  NomeDescrição
Método públicoCompatível com o XNA FrameworkCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreException()Inicializa uma nova instância da classe Exception.
Método públicoCompatível com o XNA FrameworkCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreException(String)Inicializa uma nova instância da classe de Exception com uma mensagem de erro especificada.
Método protegidoException(SerializationInfo, StreamingContext)Inicializa uma nova instância da classe Exception com dados serializados.
Método públicoCompatível com o XNA FrameworkCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreException(String, Exception)Inicializa uma nova instância da classe de Exception com uma mensagem de erro especificada e uma referência à exceção interna que é a causa dessa exceção.
Superior

  NomeDescrição
Propriedade públicaCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreData Obtém uma coleção de pares chave/valor que fornecem informações adicionais definidas pelo usuário sobre a exceção.
Propriedade públicaCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreHelpLinkObtém ou define um link para o arquivo de ajuda associado a esta exceção.
Propriedade públicaCompatível com o XNA FrameworkCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreHResultObtém ou define HRESULT, um valor numérico codificado que é atribuído a uma exceção específica.
Propriedade públicaCompatível com o XNA FrameworkCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreInnerExceptionObtém a instância de Exception que causou a exceção atual.
Propriedade públicaCompatível com o XNA FrameworkCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreMessageRecebe uma mensagem que descreve a exceção atual.
Propriedade públicaCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreSource Obtém ou define o nome do aplicativo ou do objeto que causa o erro.
Propriedade públicaCompatível com o XNA FrameworkCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreStackTraceObtém uma representação de cadeia de caracteres de peças imediatos na pilha de chamadas.
Propriedade públicaTargetSiteObtém o método que gera a exceção atual.
Superior

  NomeDescrição
Método públicoCompatível com o XNA FrameworkCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreEquals(Object) Verifica se o objeto especificado é igual ao objeto atual. (Herdado de Object.)
Método protegidoCompatível com o XNA FrameworkCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreFinalize Permite um objeto tentar liberar recursos e executar outras operações de limpeza antes que ele seja recuperado pela coleta de lixo. (Herdado de Object.)
Método públicoCompatível com o XNA FrameworkCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreGetBaseException Quando substituído em uma classe derivada, retorna a Exception que é a causa raiz de uma ou mais exceções subsequentes.
Método públicoCompatível com o XNA FrameworkCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreGetHashCodeServe como a função de hash padrão. (Herdado de Object.)
Método públicoGetObjectData Quando substituído em uma classe derivada, configura a SerializationInfo com informações sobre a exceção.
Método públicoCompatível com o XNA FrameworkCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreGetType Obtém o tipo em tempo de execução da instância atual.

No XNA Framework 3.0, este membro é herdado de Object.GetType().


No Biblioteca de Classes Portátil Biblioteca de Classes Portátil, este membro é herdado de Object.GetType().


No .NET para aplicativos da Windows Store Windows 8, este membro é herdado de Object.GetType().
Método protegidoCompatível com o XNA FrameworkCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreMemberwiseCloneCria uma cópia superficial do Object atual. (Herdado de Object.)
Método públicoCompatível com o XNA FrameworkCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreToString Cria e retorna uma representação da cadeia de caracteres da exceção atual. (Substitui Object.ToString().)
Superior

  NomeDescrição
Evento protegidoSerializeObjectStateOcorre quando uma exceção é serializada para criar um objeto do estado da exceção que contém dados serializado sobre a exceção.
Superior

Esta classe é a classe base para todas as exceções. Quando ocorre um erro, o sistema ou o aplicativo em execução no relatório gerando uma exceção que contém informações sobre o erro. Depois que uma exceção é gerada, será tratada pelo aplicativo ou pelo manipulador padrão de exceção.

Nesta seção:

Erros e exceções
Blocos try/catch
Recursos do tipo de exceção
Propriedades da classe de exceção
Considerações sobre desempenho
Escolhendo exceções padrão
Implementando exceções personalizadas

Erros e exceções

Os erros em tempo de execução podem ocorrer por vários motivos. No entanto, nem todos os erros devem ser tratados como exceções em seu código. Aqui estão algumas categorias de erros que podem ocorrer em tempo de execução e as formas apropriadas para de responder.

  • Erros de uso. Um erro de uso representa um erro na lógica de programação que pode levar a uma exceção. No entanto, o erro deve ser resolvido não com a manipulação de exceção mas alterando o código com falha. Por exemplo, a substituição do método de Object.Equals(Object) no exemplo a seguir assume que o argumento de obj sempre deve ser não nulo.

    
    using System;
    
    public class Person
    {
       private string _name;
    
       public string Name 
       {
          get { return _name; } 
          set { _name = value; }
       }
    
       public override int GetHashCode()
       {
          return this.Name.GetHashCode();  
       }  
    
       public override bool Equals(object obj)
       {
          // This implementation contains an error in program logic:
          // It assumes that the obj argument is not null.
          Person p = (Person) obj;
          return this.Name.Equals(p.Name);
       }
    }
    
    public class Example
    {
       public static void Main()
       {
          Person p1 = new Person();
          p1.Name = "John";
          Person p2 = null; 
    
          // The following throws a NullReferenceException.
          Console.WriteLine("p1 = p2: {0}", p1.Equals(p2));   
       }
    }
    
    
    

    A exceção de NullReferenceException que os resultados quando obj é null podem ser eliminados alterando o código-fonte explicitamente para testar o zero antes de chamar a substituição e a reabilitação de compilação de Object.Equals . O exemplo a seguir contém o código-fonte fixo que trata um argumento de null .

    
    using System;
    
    public class Person
    {
       private string _name;
    
       public string Name 
       {
          get { return _name; } 
          set { _name = value; }
       }
    
       public override int GetHashCode()
       {
          return this.Name.GetHashCode();  
       }  
    
       public override bool Equals(object obj)
       {
           // This implementation handles a null obj argument.
           Person p = obj as Person; 
           if (p == null) 
              return false;
           else
              return this.Name.Equals(p.Name);
       }
    }
    
    public class Example
    {
       public static void Main()
       {
          Person p1 = new Person();
          p1.Name = "John";
          Person p2 = null; 
    
          Console.WriteLine("p1 = p2: {0}", p1.Equals(p2));   
       }
    }
    // The example displays the following output:
    //        p1 = p2: False
    
    
    

    Em vez de usar a manipulação de exceção para erros de uso, você pode usar o método de Debug.Assert para identificar erros de uso em construções de depuração, e o método de Trace.Assert para identificar erros de uso na depuração e para liberar construções. Para obter mais informações, consulte Asserções em código gerenciado.

  • Erros de programa. Um erro de programa é um erro em tempo de execução que não pode ser evitado necessariamente gravando o código sem erros.

    Em alguns casos, um erro de programa pode refletir uma condição de erro ou esperada de rotina. Nesse caso, você pode desejar evitar usar a manipulação de exceção para tratar o erro de programa e para repetir em vez da operação. Por exemplo, se o usuário é esperado entre uma data em um formato específico, você pode analisar a cadeia de caracteres de data chamando o método do DateTime.TryParseExact , que retorna um valor de Boolean que indica se a operação de análise foi bem-sucedida, em vez de usar o método de DateTime.ParseExact , que gerencie uma exceção de FormatException se a cadeia de caracteres de data não pode ser convertida em um valor de DateTime . Da mesma forma, se um usuário tentar abrir um arquivo que não existe, você pode primeiro chame o método de File.Exists verifique se o arquivo existe e, se não fizer isso, para solicitar ao usuário ou se deseja criar o.

    Em outros casos, um erro de programa reflete uma condição de erro inesperado que pode ser tratada em seu código. Por exemplo, mesmo se você selecionou para garantir que um arquivo existente, pode ser excluído antes de poder abrir o, ou pode estar danificado. Nesse caso, tentar abrir o arquivo criando uma instância de um objeto de StreamReader ou chamando o método de Open pode gerar uma exceção de FileNotFoundException . Nesses casos, você deve usar a manipulação de exceção para recuperar de erro.

  • Falhas de sistema. Uma falha do sistema é um erro em tempo de execução que não pode ser tratado de forma programada em uma forma significativa. Por exemplo, qualquer método pode gerar uma exceção de OutOfMemoryException se Common Language Runtime não conseguir alocar memória adicional. Normalmente, as falhas de sistema não são tratadas usando a manipulação de exceção. Em vez disso, você poderá usar um evento como AppDomain.UnhandledException e chamar o método de Environment.FailFast para registrar informações de exceção e notificar o usuário da falha antes que o aplicativo termina.

Blocos try/catch

Common Language Runtime fornece um modelo de manipulação de exceção com base na representação de exceções como objetos, e separação de código de programa e de código de manipulação de exceção em blocos de try blocos e de catch . Pode haver um ou vários blocos de catch , cada um criado para tratar um tipo específico de exceção, ou um bloco criado para capturar uma exceção mais específico que outro bloco.

Se um aplicativo trata as exceções que ocorrem durante a execução de um bloco de código do aplicativo, o código deve ser colocado dentro de uma instrução de try e é chamado em um bloco de try . O código do aplicativo que trata as exceções lançadas por um bloco de try é colocado dentro de uma instrução de catch e chamado em um bloco de catch . Zero ou mais blocos de catch são associados a um bloco de try , e cada bloco de catch inclui um filtro de tipo que determina os tipos de exceções que trata.

Quando uma exceção ocorre em um bloco de try , o sistema pesquisa os blocos associados de catch na ordem em que aparecem em código do aplicativo, até que encontrarem um bloco de catch que trata a exceção. Um bloco de catch controlar uma exceção do tipo T se o filtro de tipo do bloco de captura especifica T ou qualquer tipo que T derivar. O do sistema para pesquisar após encontrar o primeiro bloco de catch que trata a exceção. Por esse motivo, no código do aplicativo, um bloco de catch que manipula um tipo deve ser especificado antes de um bloco de catch que trata os tipos de base, como mostrado no exemplo a seguir esta seção. Um bloco de captura que trata System.Exception é o último especificado.

Se nenhum dos blocos de catch associados ao identificador atual do bloco de try a exceção, e o bloco atual de try são aninhados dentro de outros blocos de try na chamada atual, os blocos de catch associados ao bloco inclusive seguir de try serão pesquisados. Se nenhum pacote de catch da exceção for localizado, o sistema pesquisa níveis de aninhamento anteriores na chamada atual. Se nenhum pacote de catch da exceção é encontrada na chamada atual, a exceção será passada acima da pilha de chamadas, e o quadro de pilhas anterior é pesquisado por um bloco de catch que trata a exceção. A pesquisa de pilha de chamadas continuará até que a exceção seja tratada ou até que mais nenhum quadro existe na pilha de chamadas. Se a parte superior da pilha de chamadas é atingido sem localizar um bloco de catch que trata a exceção, o manipulador padrão de exceção tratá-la e o aplicativo termina.

Recursos do tipo de exceção

Os tipos de exceção oferece suporte aos seguintes recursos:

  • Texto legível que descreve o erro. Quando uma exceção ocorre, o tempo de execução faz uma mensagem de texto disponível para informar o usuário da natureza de erro e para sugerir a ação resolver o problema. Essa mensagem de texto é mantida na propriedade de Message do objeto de exceção. Durante a criação do objeto de exceção, você pode passar uma cadeia de caracteres de texto ao construtor para descrever os detalhes dessa exceção específica. Se nenhum argumento da mensagem de erro é fornecido ao construtor, a mensagem de erro padrão será usada. Para obter mais informações, consulte a propriedade Message.

  • O estado da pilha de chamadas quando a exceção foi gerada. A propriedade de StackTrace leva um rastreamento de pilha que pode ser usado para determinar onde o erro ocorrer em código. O rastreamento de pilha lista todos os métodos chamados e números de linha no arquivo de origem onde as chamadas são feitas.

Propriedades da classe de exceção

A classe de Exception inclui várias propriedades que ajudam a identificar o local do código, o tipo, o arquivo de ajuda, e o motivo da exceção: StackTrace, InnerException, Message, HelpLink, HResult, Source, TargetSite, e Data.

Quando existe uma relação causal entre dois ou mais exceções, a propriedade de InnerException mantém essas informações. A exceção é lançada externa em resposta a essa exceção interna. O código que trata a exceção externo pode usar as informações da exceção interna anterior para tratar o erro adequadamente mais. Informações complementares sobre a exceção pode ser armazenada como uma coleção de pares de chave/valor na propriedade de Data .

A cadeia de caracteres da mensagem de erro que é passada para o construtor durante a criação do objeto de exceção deve ser encontrada e pode ser fornecida de um arquivo de recursos usando a classe de ResourceManager . Para obter mais informações sobre os recursos encontrados, consulte os tópicos de Criando assemblies satélite para aplicativos de área de trabalho e de Empacotando e implantando recursos em aplicativos de área de trabalho .

Para fornecer ao usuário com extensa informações sobre o motivo da exceção ocorreu, a propriedade de HelpLink pode manter uma URL (ou o URN) para um arquivo de ajuda.

A classe de Exception usa o HRESULT COR_E_EXCEPTION, que contém o valor 0x80131500.

Para obter uma lista de valores de propriedade iniciais para uma instância da classe de Exception , consulte os construtores de Exception .

Considerações sobre desempenho

Gerando ou tratando uma exceção consome uma quantidade significativa de recursos do sistema e de tempo de execução. Gerencie exceções para tratar apenas condições de fato, não extraordinárias para tratar eventos ou controle de fluxo previsível. Por exemplo, em alguns casos, como quando você estiver desenvolvendo uma biblioteca de classe, é razoável gerar uma exceção se um argumento do método for inválido, porque espera seu método ser chamado com parâmetros válidos. Um argumento inválido do método, caso contrário é o resultado de um erro de uso, significa que extraordinário algo ocorreu. Por outro lado, o não gerencie uma exceção se a entrada do usuário for inválido, porque você pode esperar que os usuários inserir ocasionalmente dados inválidos. Em vez disso, para fornecer um mecanismo de repetição para que os usuários podem inscrever a entrada válida. Ou você deve usar exceções para tratar erros de uso. Em vez disso, use asserções identificar e erros de uso correto.

Além disso, não gerencie uma exceção quando um código de retorno é suficiente; não converter um código de retorno a uma exceção; rotineiramente e não capturar uma exceção, não a ignorar, e não o continuar a processar.

Escolhendo exceções padrão

Quando você precisa gerar uma exceção, muitas vezes você pode usar uma exceção existente no .NET Framework em vez de implementar uma exceção personalizada. Você deve usar um tipo de exceção padrão sob estas duas condições:

  • Você está gerando uma exceção que é gerada por um erro de uso (isto é, um erro na lógica do programa feita pelo desenvolvedor que está chamando o método). Normalmente, você jogaria uma exceção como ArgumentException, ArgumentNullException, InvalidOperationException, ou NotSupportedException. A cadeia de caracteres que você fornece para o construtor do objeto de exceção quando criar uma instância do objeto de exceção deve descrever o erro de forma que o desenvolvedor do possa corrigir. Para obter mais informações, consulte a propriedade Message.

  • Você está executando um erro que pode ser anúncio ao chamador com uma exceção existente do.NET Framework. Você deve gerar a exceção mais derivada possível. Por exemplo, se um método requer um argumento ser um membro válido de um tipo de enumeração, você deve gerar InvalidEnumArgumentException (a maioria de classe derivada) em vez de ArgumentException.

Implementando exceções personalizadas

Nos seguintes casos, usar uma exceção existente do.NET Framework para tratar uma condição de erro não é suficiente:

  • Quando a exceção refletir um erro exclusivo de programa que não pode ser mapeado para uma exceção existente do.NET Framework.

  • Quando a exceção requer manipulação que é diferente da manipulação que é apropriado para uma exceção existente do .NET Framework, ou a exceção deve ser resolvida de uma exceção semelhante. Por exemplo, se você gerou uma exceção de ArgumentOutOfRangeException a análise da representação numérica de uma cadeia de caracteres que está fora do intervalo do tipo integrante de destino, não convém usar a mesma exceção para um erro que resulta do chamador que não fornece os valores apropriados restritos ao chamar o método.

A classe de Exception é a classe base de todas as exceções no.NET Framework. Muitas classes derivadas se baseiam no comportamento herdado dos membros de classe de Exception ; não substitui os membros de Exception, nem definem todos os membros exclusivos.

Para definir sua própria classe de exceção:

  1. Define uma classe que herde de Exception. Se necessário, define todos os membros exclusivos necessários pela sua classe fornecer informações adicionais sobre a exceção. Por exemplo, a classe de ArgumentException inclui uma propriedade de ParamName que especifica o nome do parâmetro cujo argumento causou a exceção, e a propriedade de RegexMatchTimeoutException inclui uma propriedade de MatchTimeout que indica o intervalo de tempo limite.

  2. Se necessário, substitua todos os membros herdados cuja funcionalidade você queira alterar ou modificar. Observe que a maioria das classes derivadas existentes de Exception não substitui o comportamento de membros herdados.

  3. Determine se seu objeto personalizado de exceção é serializable. A serialização permite salvar as informações sobre a exceção e permite informações de exceção ser compartilhada por um servidor e um proxy de cliente em um contexto comunicação remota. Para fazer o objeto de exceção serializável, o marcará com o atributo de SerializableAttribute .

  4. Define os construtores da classe de exceção. Normalmente, as classes de exceção tenham um ou mais dos seguintes construtores:

    • Exception() , que usa valores padrão para inicializar as propriedades de um novo objeto de exceção.

    • Exception(String) , que inicializa um novo objeto de exceção com uma mensagem de erro especificada.

    • Exception(String, Exception) , que inicializa um novo objeto de exceção com uma mensagem de erro e a exceção interna especificadas.

    • Exception(SerializationInfo, StreamingContext) , que é um construtor de protected que inicializa um novo objeto de exceção dos dados serializados. Você deve implementar este construtor se você escolheu para fazer seu objeto de exceção serializável.

O exemplo a seguir ilustra o uso de uma classe personalizada de exceção. Define uma exceção de NotPrimeException que é lançada quando um cliente tentar recuperar uma sequência de números principais especificando um número inicial que não é principal. A exceção define uma nova propriedade, NonPrime, o que retorna o número de segunda opção que provocou a exceção. Além de implementar um construtor sem parâmetros protegido e um construtor com SerializationInfo e parâmetros de StreamingContext para serialização, a classe de NotPrimeException define três construtores adicionais para dar suporte à propriedade de NonPrime . Cada construtor chama um construtor de classe base além de preservar o valor do número de segunda opção. A classe de NotPrimeException também é marcada com o atributo de SerializableAttribute .


using System;
using System.Runtime.Serialization;

[Serializable()]
public class NotPrimeException : Exception
{
   private int notAPrime;

   protected NotPrimeException()
      : base()
   { }

   public NotPrimeException(int value) :
      base(String.Format("{0} is not a prime number.", value))
   {
      notAPrime = value;
   }

   public NotPrimeException(int value, string message)
      : base(message)
   {
      notAPrime = value;
   }

   public NotPrimeException(int value, string message, Exception innerException) :
      base(message, innerException)
   {
      notAPrime = value;
   }

   protected NotPrimeException(SerializationInfo info,
                               StreamingContext context)
      : base(info, context)
   { }

   public int NonPrime
   { get { return notAPrime; } }
}


A classe de PrimeNumberGenerator mostrada no exemplo a seguir usa a peneira de Eratosthenes para calcular a sequência de números à esquerda de 2 a um limite especificado pelo cliente na chamada ao construtor de classe. O método de GetPrimesFrom retorna todos os números de identidade que são maiores ou iguais a um limite inferior especificado, mas gera NotPrimeException se esse limite inferior não é um número principal.


using System;
using System.Collections.Generic;


[Serializable]
public class PrimeNumberGenerator
{
   private const int START = 2;
   private int maxUpperBound = 10000000;
   private int upperBound;
   private bool[] primeTable;
   private List<int> primes = new List<int>();

   public PrimeNumberGenerator(int upperBound)
   {
      if (upperBound > maxUpperBound)
      {
         string message = String.Format(
                           "{0} exceeds the maximum upper bound of {1}.",
                           upperBound, maxUpperBound);
         throw new ArgumentOutOfRangeException(message);
      }
      this.upperBound = upperBound;
      // Create array and mark 0, 1 as not prime (True).
      primeTable = new bool[upperBound + 1];
      primeTable[0] = true;
      primeTable[1] = true;

      // Use Sieve of Eratosthenes to determine prime numbers.
      for (int ctr = START; ctr <= (int)Math.Ceiling(Math.Sqrt(upperBound));
            ctr++)
      {
         if (primeTable[ctr]) continue;

         for (int multiplier = ctr; multiplier <= upperBound / ctr; multiplier++)
            if (ctr * multiplier <= upperBound) primeTable[ctr * multiplier] = true;
      }
      // Populate array with prime number information.
      int index = START;
      while (index != -1)
      {
         index = Array.FindIndex(primeTable, index, (flag) => !flag);
         if (index >= 1)
         {
            primes.Add(index);
            index++;
         }
      }
   }

   public int[] GetAllPrimes()
   {
      return primes.ToArray();
   }

   public int[] GetPrimesFrom(int prime)
   {
      int start = primes.FindIndex((value) => value == prime);
      if (start < 0)
         throw new NotPrimeException(prime, String.Format("{0} is not a prime number.", prime));
      else
         return primes.FindAll((value) => value >= prime).ToArray();
   }
}


O exemplo a seguir faz duas chamadas para o método com números de segunda-feira, escolha um de GetPrimesFrom dos limites de domínio do aplicativo de for cruzar os. Em ambos os casos, a exceção será gerada e tratada com êxito em código de cliente.


using System;
using System.Reflection;

class Example
{
   public static void Main()
   {
      int limit = 10000000;
      PrimeNumberGenerator primes = new PrimeNumberGenerator(limit);
      int start = 1000001;
      try
      {
         int[] values = primes.GetPrimesFrom(start);
         Console.WriteLine("There are {0} prime numbers from {1} to {2}",
                           start, limit);
      }
      catch (NotPrimeException e)
      {
         Console.WriteLine("{0} is not prime", e.NonPrime);
         Console.WriteLine(e);
         Console.WriteLine("--------");
      }

      AppDomain domain = AppDomain.CreateDomain("Domain2");
      PrimeNumberGenerator gen = (PrimeNumberGenerator)domain.CreateInstanceAndUnwrap(
                                        typeof(Example).Assembly.FullName,
                                        "PrimeNumberGenerator", true,
                                        BindingFlags.Default, null,
                                        new object[] { 1000000 }, null, null);
      try
      {
         start = 100;
         Console.WriteLine(gen.GetPrimesFrom(start));
      }
      catch (NotPrimeException e)
      {
         Console.WriteLine("{0} is not prime", e.NonPrime);
         Console.WriteLine(e);
         Console.WriteLine("--------");
      }
   }
}


Tempo de Execução do Windows e .NET Framework 4.5.1

Em .NET para aplicativos da Windows Store para Windows 8, algumas informações de exceção é perdida geralmente quando uma exceção é propagada por peças de pilha da estrutura de non-.NET. A partir .NET Framework 4.5.1 e Windows 8.1, Common Language Runtime o continua a usar o objeto original de Exception que foi gerado a menos que a exceção foi alterada em um quadro de pilhas da estrutura de non-.NET.

O exemplo a seguir demonstra um bloco de catch que é definido para tratar erros de ArithmeticException . Este bloco de catch também captura erros de DivideByZeroException , porque DivideByZeroException se deriva de ArithmeticException e não há nenhum pacote de catch definido explicitamente para erros de DivideByZeroException .


using System;

class ExceptionTestClass 
{
   public static void Main() 
   {
      int x = 0;
      try 
      {
         int y = 100/x;
      }
         catch (ArithmeticException e) 
         {
            Console.WriteLine("ArithmeticException Handler: {0}", e.ToString());
         }
         catch (Exception e) 
         {
            Console.WriteLine("Generic Exception Handler: {0}", e.ToString());
         }
   }	
}
/*
This code example produces the following results:

ArithmeticException Handler: System.DivideByZeroException: Attempted to divide by zero.
   at ExceptionTestClass.Main()

*/


.NET Framework

Com suporte em: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Com suporte em: 4, 3.5 SP1

Biblioteca de Classes Portátil

Com suporte em: Biblioteca de Classes Portátil

.NET para aplicativos da Windows Store

Com suporte em: Windows 8

.NET para aplicativos do Windows Phone

Com suporte em: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Função Server Core sem suporte), Windows Server 2008 R2 (Função Server Core com suporte com o SP1 ou posterior, Itanium sem suporte)

O .NET Framework não oferece suporte a todas as versões de cada plataforma. Para obter uma lista das versões com suporte, consulte Requisitos do sistema do .NET Framework.

Quaisquer membros estático (Shared no Visual Basic) públicos deste tipo são thread-safe. Não há garantia de que qualquer membro de instância seja thread-safe.

System.Object
  System.Exception
    Microsoft.Build.BuildEngine.InternalLoggerException
    Microsoft.Build.BuildEngine.InvalidProjectFileException
    Microsoft.Build.BuildEngine.InvalidToolsetDefinitionException
    Microsoft.Build.BuildEngine.RemoteErrorException
    Microsoft.Build.Exceptions.BuildAbortedException
    Microsoft.Build.Exceptions.InternalLoggerException
    Microsoft.Build.Exceptions.InvalidProjectFileException
    Microsoft.Build.Exceptions.InvalidToolsetDefinitionException
    Microsoft.Build.Framework.LoggerException
    Microsoft.CSharp.RuntimeBinder.RuntimeBinderException
    Microsoft.CSharp.RuntimeBinder.RuntimeBinderInternalCompilerException
    Microsoft.JScript.CmdLineException
    Microsoft.JScript.ParserException
    Microsoft.VisualBasic.ApplicationServices.CantStartSingleInstanceException
    Microsoft.VisualBasic.ApplicationServices.NoStartupFormException
    Microsoft.VisualBasic.Compatibility.VB6.WebClassContainingClassNotOptional
    Microsoft.VisualBasic.Compatibility.VB6.WebClassCouldNotFindEvent
    Microsoft.VisualBasic.Compatibility.VB6.WebClassNextItemCannotBeCurrentWebItem
    Microsoft.VisualBasic.Compatibility.VB6.WebClassNextItemRespondNotFound
    Microsoft.VisualBasic.Compatibility.VB6.WebClassUserWebClassNameNotOptional
    Microsoft.VisualBasic.Compatibility.VB6.WebClassWebClassFileNameNotOptional
    Microsoft.VisualBasic.Compatibility.VB6.WebClassWebItemNotValid
    Microsoft.VisualBasic.Compatibility.VB6.WebItemAssociatedWebClassNotOptional
    Microsoft.VisualBasic.Compatibility.VB6.WebItemClosingTagNotFound
    Microsoft.VisualBasic.Compatibility.VB6.WebItemCouldNotLoadEmbeddedResource
    Microsoft.VisualBasic.Compatibility.VB6.WebItemCouldNotLoadTemplateFile
    Microsoft.VisualBasic.Compatibility.VB6.WebItemNameNotOptional
    Microsoft.VisualBasic.Compatibility.VB6.WebItemNoTemplateSpecified
    Microsoft.VisualBasic.Compatibility.VB6.WebItemTooManyNestedTags
    Microsoft.VisualBasic.Compatibility.VB6.WebItemUnexpectedErrorReadingTemplateFile
    Microsoft.VisualBasic.CompilerServices.IncompleteInitialization
    Microsoft.VisualBasic.CompilerServices.InternalErrorException
    Microsoft.VisualBasic.FileIO.MalformedLineException
    System.Activities.DynamicUpdate.InstanceUpdateException
    System.Activities.ExpressionParser.SourceExpressionException
    System.Activities.Expressions.LambdaSerializationException
    System.Activities.InvalidWorkflowException
    System.Activities.Presentation.Metadata.AttributeTableValidationException
    System.Activities.Statements.WorkflowTerminatedException
    System.Activities.VersionMismatchException
    System.Activities.WorkflowApplicationException
    System.AddIn.Hosting.AddInSegmentDirectoryNotFoundException
    System.AddIn.Hosting.InvalidPipelineStoreException
    System.AggregateException
    System.ApplicationException
    System.ComponentModel.Composition.CompositionContractMismatchException
    System.ComponentModel.Composition.CompositionException
    System.ComponentModel.Composition.ImportCardinalityMismatchException
    System.ComponentModel.Composition.Primitives.ComposablePartException
    System.ComponentModel.DataAnnotations.ValidationException
    System.ComponentModel.Design.ExceptionCollection
    System.Configuration.Provider.ProviderException
    System.Configuration.SettingsPropertyIsReadOnlyException
    System.Configuration.SettingsPropertyNotFoundException
    System.Configuration.SettingsPropertyWrongTypeException
    System.Data.Linq.ChangeConflictException
    System.Diagnostics.Eventing.Reader.EventLogException
    System.Diagnostics.Tracing.EventSourceException
    System.DirectoryServices.ActiveDirectory.ActiveDirectoryObjectExistsException
    System.DirectoryServices.ActiveDirectory.ActiveDirectoryObjectNotFoundException
    System.DirectoryServices.ActiveDirectory.ActiveDirectoryOperationException
    System.DirectoryServices.ActiveDirectory.ActiveDirectoryServerDownException
    System.DirectoryServices.Protocols.DirectoryException
    System.IdentityModel.AsynchronousOperationException
    System.IdentityModel.Metadata.MetadataSerializationException
    System.IdentityModel.Protocols.WSTrust.WSTrustSerializationException
    System.IdentityModel.RequestException
    System.IdentityModel.Selectors.CardSpaceException
    System.IdentityModel.Selectors.IdentityValidationException
    System.IdentityModel.Selectors.PolicyValidationException
    System.IdentityModel.Selectors.ServiceBusyException
    System.IdentityModel.Selectors.ServiceNotStartedException
    System.IdentityModel.Selectors.StsCommunicationException
    System.IdentityModel.Selectors.UnsupportedPolicyOptionsException
    System.IdentityModel.Selectors.UntrustedRecipientException
    System.IdentityModel.Selectors.UserCancellationException
    System.IdentityModel.Services.AsynchronousOperationException
    System.IdentityModel.Services.FederatedAuthenticationSessionEndingException
    System.IdentityModel.Services.FederationException
    System.IdentityModel.Services.WSFederationMessageException
    System.InvalidTimeZoneException
    System.IO.IsolatedStorage.IsolatedStorageException
    System.IO.Log.SequenceFullException
    System.Management.Instrumentation.InstrumentationBaseException
    System.Management.Instrumentation.WmiProviderInstallationException
    System.Net.Http.HttpRequestException
    System.Net.Mail.SmtpException
    System.Net.PeerToPeer.PeerToPeerException
    System.Runtime.CompilerServices.RuntimeWrappedException
    System.Runtime.DurableInstancing.InstancePersistenceException
    System.Runtime.Remoting.MetadataServices.SUDSGeneratorException
    System.Runtime.Remoting.MetadataServices.SUDSParserException
    System.Runtime.Serialization.InvalidDataContractException
    System.Security.RightsManagement.RightsManagementException
    System.ServiceModel.Channels.InvalidChannelBindingException
    System.SystemException
    System.Threading.BarrierPostPhaseException
    System.Threading.LockRecursionException
    System.Threading.Tasks.TaskSchedulerException
    System.TimeZoneNotFoundException
    System.Web.Query.Dynamic.ParseException
    System.Web.Security.MembershipCreateUserException
    System.Web.Security.MembershipPasswordException
    System.Web.UI.ViewStateException
    System.Web.UI.WebControls.EntityDataSourceValidationException
    System.Web.UI.WebControls.LinqDataSourceValidationException
    System.Windows.Automation.NoClickablePointException
    System.Windows.Automation.ProxyAssemblyNotLoadedException
    System.Windows.Controls.PrintDialogException
    System.Windows.Forms.AxHost.InvalidActiveXStateException
    System.Windows.Xps.XpsException
    System.Windows.Xps.XpsWriterException
    System.Workflow.Activities.Rules.RuleException
    System.Workflow.ComponentModel.Compiler.WorkflowValidationFailedException
    System.Workflow.ComponentModel.Serialization.WorkflowMarkupSerializationException
    System.Workflow.ComponentModel.WorkflowTerminatedException
    System.Workflow.Runtime.WorkflowOwnershipException
    System.Xaml.XamlException

Contribuições da comunidade

ADICIONAR
A Microsoft está realizando uma pesquisa online para saber sua opinião sobre o site do MSDN. Se você optar por participar, a pesquisa online lhe será apresentada quando você sair do site do MSDN.

Deseja participar?
Mostrar:
© 2015 Microsoft