Controlar y generar excepciones en .NETHandling and throwing exceptions in .NET

Las aplicaciones tienen que ser capaces de controlar de forma coherente los errores que se producen durante la ejecución.Applications must be able to handle errors that occur during execution in a consistent manner. .NET proporciona un modelo para notificar errores a las aplicaciones de manera uniforme: las operaciones .NET indican errores iniciando excepciones..NET provides a model for notifying applications of errors in a uniform way: .NET operations indicate failure by throwing exceptions.

ExcepcionesExceptions

Una excepción es cualquier condición de error o comportamiento inesperado que encuentra un programa en ejecución.An exception is any error condition or unexpected behavior that is encountered by an executing program. Las excepciones pueden iniciarse debido a un error en el código propio o en el código al que se llama (por ejemplo, una biblioteca compartida), a recursos del sistema operativo no disponibles, a condiciones inesperadas que encuentra el runtime (por ejemplo, imposibilidad de comprobar el código), etc.Exceptions can be thrown because of a fault in your code or in code that you call (such as a shared library), unavailable operating system resources, unexpected conditions that the runtime encounters (such as code that can't be verified), and so on. La aplicación puede recuperarse de algunas de estas condiciones, pero no de todas.Your application can recover from some of these conditions, but not from others. Aunque es posible recuperarse de la mayoría de las excepciones que se producen en la aplicación, no ocurre lo mismo con las excepciones de runtime.Although you can recover from most application exceptions, you can't recover from most runtime exceptions.

En .NET, una excepción es un objeto que hereda de la clase System.Exception.In .NET, an exception is an object that inherits from the System.Exception class. Una excepción se inicia desde un área del código en la que ha producido un problema.An exception is thrown from an area of code where a problem has occurred. La excepción se pasa hacia arriba en la pila hasta que la aplicación la controla o el programa finaliza.The exception is passed up the stack until the application handles it or the program terminates.

Excepciones vs. métodos tradicionales de control de erroresExceptions vs. traditional error-handling methods

Tradicionalmente, el modelo de control de errores de un lenguaje se basaba en el modo exclusivo del lenguaje de detectar los errores y buscarles controladores, o bien en el mecanismo de control de errores ofrecido por el sistema operativo.Traditionally, a language's error-handling model relied on either the language's unique way of detecting errors and locating handlers for them, or on the error-handling mechanism provided by the operating system. La forma en que .NET implementa el control de excepciones proporciona las siguientes ventajas:The way .NET implements exception handling provides the following advantages:

  • La administración e iniciación de excepciones funciona de igual modo para los lenguajes de programación. NET.Exception throwing and handling works the same for .NET programming languages.

  • No requiere ninguna sintaxis de lenguaje específica para controlar las excepciones, pero permite que cada lenguaje defina su propia sintaxis.Doesn't require any particular language syntax for handling exceptions, but allows each language to define its own syntax.

  • Las excepciones pueden iniciarse en varios procesos en incluso límites de máquina.Exceptions can be thrown across process and even machine boundaries.

  • Se puede agregar el código de control de excepciones a una aplicación para aumentar la confiabilidad del programa.Exception-handling code can be added to an application to increase program reliability.

Las excepciones ofrecen ventajas sobre otros métodos de notificación de errores, por ejemplo, los códigos de retorno.Exceptions offer advantages over other methods of error notification, such as return codes. Lo errores no pasan desapercibidos porque si se inicia una excepción y no la controla, el runtime finaliza la aplicación.Failures don't go unnoticed because if an exception is thrown and you don't handle it, the runtime terminates your application. Los valores no válidos no continúan propagándose por el sistema como resultado de que el código no pueda encontrar un código de retorno de error.Invalid values don't continue to propagate through the system as a result of code that fails to check for a failure return code.

Excepciones comunesCommon exceptions

En la tabla siguiente se muestra algunas excepciones comunes con ejemplos de las causas que las originan.The following table lists some common exceptions with examples of what can cause them.

Tipo de excepciónException type DescripciónDescription EjemploExample
Exception Clase base de todas las excepciones.Base class for all exceptions. Ninguno (utilice una clase derivada de esta excepción).None (use a derived class of this exception).
IndexOutOfRangeException El tiempo de ejecución la genera solo cuando una matriz no está correctamente indexada.Thrown by the runtime only when an array is indexed improperly. La indexación de una matriz fuera de su intervalo válido:Indexing an array outside its valid range:
arr[arr.Length+1]
NullReferenceException El tiempo de ejecución la genera solo cuando se hace referencia a un objeto null.Thrown by the runtime only when a null object is referenced. object o = null;
o.ToString();
InvalidOperationException Los métodos la generan si se produce un estado no válido.Thrown by methods when in an invalid state. Llamada a Enumerator.MoveNext() después de quitar un elemento de la colección subyacente.Calling Enumerator.MoveNext() after removing an item from the underlying collection.
ArgumentException Clase base de todas las excepciones de argumento.Base class for all argument exceptions. Ninguno (utilice una clase derivada de esta excepción).None (use a derived class of this exception).
ArgumentNullException Los métodos que no permiten que un argumento sea null la generan.Thrown by methods that do not allow an argument to be null. String s = null;
"Calculate".IndexOf(s);
ArgumentOutOfRangeException Los métodos que comprueban que los argumentos se encuentran en un intervalo determinado la generan.Thrown by methods that verify that arguments are in a given range. String s = "string";
s.Substring(s.Length+1);

Vea tambiénSee also