Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

Exception (Clase)

Representa los errores que se producen durante la ejecución de una aplicación.

Espacio de nombres:  System
Ensamblado:  mscorlib (en mscorlib.dll)

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

El tipo Exception expone los siguientes miembros.

  NombreDescripción
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsException()Inicializa una nueva instancia de la clase Exception.
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsException(String)Inicializa una nueva instancia de la clase Exception con el mensaje de error especificado.
Método protegidoException(SerializationInfo, StreamingContext)Inicializa una nueva instancia de la clase Exception con datos serializados.
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsException(String, Exception)Inicializa una nueva instancia de la clase Exception con un mensaje de error especificado y una referencia a la excepción interna que representa la causa de esta excepción.
Arriba

  NombreDescripción
Propiedad públicaCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsDataObtiene una colección de pares clave-valor que proporcionan información adicional definida por el usuario acerca de la excepción.
Propiedad públicaCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsHelpLinkObtiene o establece un vínculo al archivo de ayuda asociado a esta excepción.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsHResultObtiene o establece HRESULT, un valor numérico codificado que se asigna a una excepción específica.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsInnerExceptionObtiene la instancia Exception que produjo la excepción actual.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsMessageObtiene un mensaje que describe la excepción actual.
Propiedad públicaCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsSourceDevuelve o establece el nombre de la aplicación o del objeto que generó el error.
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsStackTraceObtiene una representación de cadena de los marcos inmediatos en la pila de llamadas.
Propiedad públicaTargetSiteObtiene el método que produjo la excepción actual.
Arriba

  NombreDescripción
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsEquals(Object)Determina si el objeto especificado es igual al objeto actual. (Se hereda de Object).
Método protegidoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsFinalize Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por la recolección de elementos no utilizados. (Se hereda de Object).
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsGetBaseExceptionCuando se reemplaza en una clase derivada, devuelve la clase Exception que representa la causa principal de una o más excepciones posteriores.
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsGetHashCode Sirve como una función hash para un tipo en particular. (Se hereda de Object).
Método públicoGetObjectDataCuando se reemplaza en una clase derivada, establece SerializationInfo con información sobre la excepción.
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsGetTypeObtiene el tipo en tiempo de ejecución de la instancia actual.

En XNA Framework 3.0, este miembro se hereda de Object.GetType().


En Biblioteca de clases portable Biblioteca de clases portable, este miembro se hereda de Object.GetType().


En .NET para aplicaciones de la Tienda Windows Windows 8, este miembro se hereda de Object.GetType().
Método protegidoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsMemberwiseClone Crea una copia superficial del Object actual. (Se hereda de Object).
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsToStringCrea y devuelve una representación de cadena de la excepción actual. (Invalida a Object.ToString()).
Arriba

  NombreDescripción
Evento protegidoSerializeObjectStateSe produce cuando se serializa una excepción para crear un objeto de estados de excepción que contiene datos serializados sobre la excepción.
Arriba

Esta clase es la clase base de todas las excepciones. Cuando se produce un error, el sistema o los informes de la aplicación en el que se ejecutan él iniciando una excepción que contiene información sobre el error. Después de que se produce una excepción, controla la aplicación o por el controlador de excepciones predeterminado.

En esta sección:

Errores y excepciones
Bloques try/catch
Características del tipo de excepción
Clase de excepción de propiedades
Consideraciones sobre el rendimiento
Elegir excepciones estándar
Implementar excepciones personalizadas

Errores y excepciones

Los errores en tiempo de ejecución pueden aparecer por varias razones. Sin embargo, no todos los errores deben controlarse como excepciones en el código. Algunas categorías de errores que pueden producirse en tiempo de ejecución y forma apropiada para responder a ellos.

  • Errores de uso. Un error de uso representa un error en la lógica que puede producir una excepción. Sin embargo, el error se debe resolver no con control de excepciones pero modificando el código defectuoso. Por ejemplo, la invalidación del método de Object.Equals(Object) en el ejemplo siguiente supone que el argumento de obj siempre debe ser 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 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));   
       }
    }
    
    
    

    La excepción de NullReferenceException que los resultados cuando obj es null pueden eliminarse modificando el código fuente explícitamente a la prueba para null antes de llamar a la invalidación de Object.Equals y después de re- compilarlo. El ejemplo siguiente contiene el código fuente corregido que controla un 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
    
    
    

    En lugar de utilizar el control de excepciones para los errores de uso, puede utilizar el método de Debug.Assert para identificar errores de uso en las compilaciones de depuración, y el método de Trace.Assert para identificar errores de uso de depuración y liberar compilaciones. Para obtener más información, vea Aserciones en el código administrado.

  • Errores de programa. Un error del programa es un error en tiempo de ejecución que no se puede evitar necesariamente escribiendo código sin ejecutadas.

    En algunos casos, un error del programa puede reflejar una condición de error esperada o rutinaria. En este caso, puede que desee evitar utilizar el control de excepciones para tratar de error del programa y en su lugar para reintentar la operación. Por ejemplo, si se espera que el usuario escriba una fecha en un formato determinado, puede analizar la cadena de fecha llamando al método DateTime.TryParseExact , que devuelve un valor de Boolean que indica si la operación de análisis se realizó correctamente, en lugar de utilizar el método de DateTime.ParseExact , que produce una excepción de FormatException si la cadena de fecha no se puede convertir en un valor de DateTime . De igual forma, si un usuario intenta abrir un archivo que no existe, puede llamar primero al método de File.Exists comprobar si el archivo existe y, si no lo hace, para solicitar al usuario si protege el desee hacerlo.

    En otros casos, un error del programa refleja una condición de error inesperada que se puede controlar en el código. Por ejemplo, aunque haya comprobado para asegurarse de que existe un archivo, se puede eliminar antes de que pueda abrirlo, o puede estar dañado. En ese caso, al intentar abrir el archivo creando instancias de un objeto de StreamReader o llamando al método de Open puede producir una excepción de FileNotFoundException . En estos casos, debe usar el control de excepciones para recuperarse del error.

  • Errores del sistema. Un error del sistema es un error en tiempo de ejecución que no se puede controlar mediante programación de forma significativa. Por ejemplo, cualquier método puede producir una excepción de OutOfMemoryException si Common Language Runtime no puede asignar memoria adicional. Normalmente, no se tratan los errores del sistema mediante el control de excepciones. En su lugar, puede utilizar un evento como AppDomain.UnhandledException y llamar al método de Environment.FailFast para registrar información de excepción y para notificar el error al usuario antes de que la aplicación finalice.

Bloques try/catch

Common Language Runtime proporciona una excepción que administra el modelo basado en la representación de excepciones como objetos, y la separación de código de programa y excepciones código de los bloques de try y bloques de catch . Puede haber uno o varios bloques catch, cada uno de los cuales está diseñado para controlar un tipo de excepción en particular; o bien, uno de los bloques está diseñado para detectar una excepción más específica que otro de los bloques.

Si una aplicación controla las excepciones que se producen durante la ejecución de un bloque de código de aplicación, el código debe colocarse dentro de una instrucción de try y se llama a un bloque de try . El código de aplicación que controla las excepciones producidas por un bloque de try se coloca dentro de una instrucción de catch y se llama a un bloque de catch . Puede haber cero o más bloques catch asociados a un bloque try. Cada uno de los bloques catch incluye un filtro de tipos que determina los tipos de excepciones que controla.

Cuando se produce una excepción en un bloque try, el sistema busca los bloques catch asociados en el orden en el que aparecen en el código de la aplicación, hasta que encuentra un bloque catch que controla la excepción. Un bloque catch controla una excepción de tipo T si el filtro de tipos del bloque catch especifica T o cualquier tipo del que se derive T. El sistema detiene la búsqueda cuando encuentra el primer bloque catch que controla la excepción. Por este motivo, el bloque catch que controla un tipo debe especificarse en el código de la aplicación delante del bloque catch que controla sus tipos base, tal y como se muestra en el ejemplo que se incluye tras esta sección. El bloque catch que controla System.Exception se especifica en último lugar.

Si ninguno de los bloques catch asociados al bloque try actual controla la excepción y el bloque try actual está anidado dentro de otros bloques try en la llamada actual, se realiza una búsqueda de los bloques catch asociados al siguiente bloque try envolvente. Si no se encuentra ningún bloque catch para la excepción, el sistema busca los niveles de anidamiento anteriores de la llamada actual. Si en la llamada actual no se encuentra ningún bloque catch para la excepción, ésta asciende por la pila de llamadas y en el marco de pila anterior se busca un bloque catch que controle la excepción. La búsqueda en la pila de llamadas continúa hasta que se controla la excepción o hasta que no hay más marcos en la pila de llamadas. Si se alcanza la parte superior de la pila de llamadas sin haber encontrado un bloque catch que controle la excepción, el controlador de excepciones predeterminado controla la excepción y la aplicación termina.

Características del tipo de excepción

Los tipos de excepción admiten las siguientes características:

  • Texto legible para el usuario donde se describe el error. Cuando se produce una excepción, el runtime realiza un mensaje de texto disponible para informar al usuario la naturaleza del error y para indicar la acción para resolver el problema. Este mensaje de texto se guarda en la propiedad Message del objeto de excepción. Durante la creación del objeto de excepción, puede pasarse una cadena de texto al constructor para que se describan los detalles de esa excepción en concreto. Si no se le proporciona al constructor ningún argumento de mensaje de error, se utiliza el mensaje de error predeterminado. Para obtener más información, vea la propiedad Message.

  • Estado de la pila de llamadas en el momento en que se produjo la excepción. La propiedad de StackTrace lleva un seguimiento de pila que se puede utilizar para determinar dónde se produce el error en el código. El seguimiento de pila muestra todos los métodos denominados y los números de línea en el archivo de código fuente donde se realizan las llamadas.

Clase de excepción de propiedades

La clase de Exception incluye varias propiedades que ayudan a identificar la ubicación del código, el tipo, el archivo de ayuda, y la razón de la excepción: StackTrace, InnerException, Message, HelpLink, HResult, Source, TargetSite, y Data.

Cuando existe una relación causal entre dos o más excepciones, la propiedad InnerException incluye esta información. La excepción externa se produce en respuesta a esta excepción interna. El código que controla la excepción externa puede utilizar la información de la excepción interna anterior para controlar el error de forma más adecuada. Información complementaria sobre la excepción puede almacenar como una colección de pares clave/valor de la propiedad de Data .

La cadena de mensaje de error que se pasa al constructor durante la creación del objeto de excepción se debe localizar y puede proporcionarse de un archivo de recursos utilizando la clase de ResourceManager . Para obtener más información sobre los recursos localizados, vea los temas de Crear ensamblados satélite para aplicaciones de escritorio y de Empaquetar e implementar recursos en aplicaciones de escritorio .

Para proporcionar al usuario con mucha información sobre por qué la excepción producida, la propiedad de HelpLink puede contener una dirección URL (o URN) de un archivo de ayuda.

La clase de Exception utiliza el HRESULT COR_E_EXCEPTION, que tiene el valor 0x80131500.

Para obtener una lista con los valores de propiedad iniciales de una instancia de la clase Exception, vea los constructores Exception.

Consideraciones sobre el rendimiento

Iniciando o administrar una excepción utiliza a una cantidad significativa de recursos del sistema y tiempo de ejecución. Hay que producir excepciones sólo para controlar condiciones verdaderamente extraordinarias, no para controlar eventos previsibles o el control del flujo. Por ejemplo, en algunos casos, como cuando se desarrolla una biblioteca de clases, es razonable producir una excepción si un argumento de método no es válido, porque se espera que el método se llama con parámetros válidos. Un argumento de método no válido, si no es el resultado de un error de uso, significa que algo extraordinario ha producido. A la inversa, no inicia una excepción si los datos proporcionados por el usuario no es válido, porque puede esperar que los usuarios escriban ocasionalmente datos no válidos. En su lugar, proporciona un mecanismo try para que los usuarios pueden entrar en entrada válida. No debe utilizar excepciones para controlar errores de uso. En su lugar, utilice aserciones de identificar y errores de uso correcto.

Además, no inicia una excepción cuando un código de retorno es suficiente; no convierta un código de retorno a una excepción; y no detecte tiene una excepción, no la omita, y no continúe procesando.

Elegir excepciones estándar

Si tiene que iniciar una excepción, a menudo se puede utilizar un tipo de excepción existente en .NET Framework en lugar de implementar una excepción personalizada. Debe utilizar un tipo de excepción estándar en estas dos condiciones:

  • Se está iniciando una excepción producida por un error de uso (es decir, a un error en la lógica creada por el desarrollador que está llamando al método). Normalmente, se lanzaría una excepción como ArgumentException, ArgumentNullException, InvalidOperationException, o NotSupportedException. La cadena suministrada al constructor del objeto de excepción al crear instancias del objeto de excepción debe describir el error de forma que se puede corregirlo. Para obtener más información, vea la propiedad Message.

  • Administra un error que se puede comunicar al llamador con una excepción existente de .NET Framework. Debe producir una excepción más derivada posible. Por ejemplo, si un método requiere un argumento sea un miembro válido de un tipo de enumeración, debe producir InvalidEnumArgumentException (la clase más derivada) en lugar de ArgumentException.

Implementar excepciones personalizadas

En los casos siguientes, con una excepción existente de .NET Framework controlar una condición de error no es adecuada:

  • Cuando la excepción refleja un error del programa único que no se puede asignar a una excepción existente de .NET Framework.

  • Cuando la excepción requiere administrar es diferente del control que es adecuada para una excepción existente de .NET Framework, o la excepción se debe eliminar la ambigüedad de una excepción similar. Por ejemplo, si se produce una excepción de ArgumentOutOfRangeException al analizar la representación numérica de una cadena que está fuera del intervalo del tipo entero de destino, no desearía utilizar la misma excepción para un error que los resultados del llamador que no proporciona valores restringidos adecuados al llamar al método.

La clase de Exception es la clase base de todas las excepciones en .NET Framework. Muchas clases derivadas dependen del comportamiento heredado de los miembros de la clase de Exception ; no reemplazan los miembros de Exception, ni se define un miembro único.

Para definir dispone de la clase de excepción:

  1. Defina una clase que herede de Exception. En caso necesario, defina a cualquier miembro único necesario por la clase para proporcionar información adicional sobre la excepción. Por ejemplo, la clase de ArgumentException incluye una propiedad de ParamName que especifique el nombre del parámetro cuyo argumento produjo la excepción, y la propiedad de RegexMatchTimeoutException incluye una propiedad de MatchTimeout que indica el intervalo de tiempo de espera.

  2. En caso necesario, reemplace a cualquier miembro heredado cuya funcionalidad desee cambiar o modificar. Tenga en cuenta que la mayoría de las clases derivadas existentes de Exception no reemplacen el comportamiento de los miembros heredados.

  3. Determina si el objeto de excepción personalizado es serializable. La serialización permite guardar información sobre la excepción y permite que la información de excepción sea compartida por un servidor y un proxy de cliente en un contexto de comunicación remota. Para crear el objeto de excepción serializable, márquelo con el atributo de SerializableAttribute .

  4. Defina los constructores de clase de excepción. Normalmente, las clases de excepción tienen uno o más constructores siguientes:

    • Exception() , que utiliza valores predeterminados para inicializar las propiedades de un nuevo objeto de excepción.

    • Exception(String) , que inicializa un nuevo objeto de excepción con un mensaje de error especificado.

    • Exception(String, Exception) , que inicializa un nuevo objeto de excepción con un mensaje de error especificado y una excepción interna.

    • Exception(SerializationInfo, StreamingContext) , que es un constructor de protected que inicializa un nuevo objeto de excepción de datos serializados. Debe implementar este constructor si ha elegido para crear el objeto de excepción serializable.

El ejemplo siguiente muestra el uso de una clase de excepción personalizada. Define una excepción de NotPrimeException que se produce cuando un cliente intenta recuperar una secuencia de números primos especificando un número inicial que no es primo. La excepción define una nueva propiedad, NonPrime, que devuelve el número no primero que produjo la excepción. Además de implementar un constructor sin parámetros protegido y un constructor con SerializationInfo y los parámetros de StreamingContext para la serialización, la clase de NotPrimeException define tres constructores adicionales para admitir la propiedad de NonPrime . Cada constructor llama a un constructor de clase base además de mantener el valor del número que primero. La clase de NotPrimeException también se marca con el 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; } }
}


La clase de PrimeNumberGenerator mostrada en el ejemplo siguiente utiliza criba de Eratóstenes para calcular la secuencia de números primos a partir de 2 a un límite especificado por el cliente en la llamada al constructor de clase. El método de GetPrimesFrom devuelve todos los números primos que son mayores o iguales que el límite inferior especificado, pero produce NotPrimeException si ese límite inferior no es un número primo.


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


El ejemplo siguiente realiza dos llamadas al método con números no primeros, uno de los cuales de GetPrimesFrom cruza los límites del dominio de aplicación. En ambos casos, la excepción se produce y se controla correctamente en el 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("--------");
      }
   }
}


Tiempo de ejecución y .NET Framework 4.5.1de Windows

En .NET para aplicaciones de la Tienda Windows para Windows 8, alguna información de excepción se pierde normalmente cuando la excepción se propaga a través de los marcos de pila distintas de .NET framework. A partir de .NET Framework 4.5.1 y Windows 8.1, Common Language Runtime sigue utilizando el objeto original de Exception que se inició a menos que esa excepción fuera modificada en un marco de pila distintas de .NET framework.

El ejemplo siguiente se muestra catch bloqueado definida para controlar los errores de ArithmeticException . Este catch bloquea también detecta los errores de DivideByZeroException , porque DivideByZeroException deriva de ArithmeticException y no hay catch bloqueado explícitamente definido para los errores 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

Compatible con: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

.NET para aplicaciones de la Tienda Windows

Compatible con: Windows 8

.NET para aplicaciones de Windows Phone

Compatible con: 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 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

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

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft