Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las características de control de excepciones del lenguaje C# le ayudan a tratar cualquier situación inesperada o excepcional que se produzca cuando se ejecuta un programa. El control de excepciones usa las try
palabras clave , catch
y finally
para probar las acciones que pueden no realizarse correctamente, para controlar los errores cuando decida que es razonable hacerlo y limpiar los recursos después. Las excepciones pueden ser generadas por el Common Language Runtime (CLR), por bibliotecas de .NET o de terceros, o por el código de la aplicación. Las excepciones se crean mediante la throw
palabra clave .
En muchos casos, se puede producir una excepción no mediante un método al que el código ha llamado directamente, sino por otro método más abajo en la pila de llamadas. Cuando se produce una excepción, CLR desenredará la pila, buscará un método con un catch
bloque para el tipo de excepción específico y ejecutará el primer catch
bloque que encuentra. Si no encuentra ningún bloque adecuado catch
en ninguna parte de la pila de llamadas, finalizará el proceso y mostrará un mensaje al usuario.
En este ejemplo, un método comprueba la división por cero y detecta el error. Sin el control de excepciones, este programa finalizaría con un error DivideByZeroException no controlado .
public class ExceptionTest
{
static double SafeDivision(double x, double y)
{
if (y == 0)
throw new DivideByZeroException();
return x / y;
}
public static void Main()
{
// Input for test purposes. Change the values to see
// exception handling behavior.
double a = 98, b = 0;
double result;
try
{
result = SafeDivision(a, b);
Console.WriteLine($"{a} divided by {b} = {result}");
}
catch (DivideByZeroException)
{
Console.WriteLine("Attempted divide by zero.");
}
}
}
Información general sobre excepciones
Las excepciones tienen las siguientes propiedades:
- Las excepciones son tipos que, en última instancia, derivan de
System.Exception
. - Use un
try
bloque alrededor de las instrucciones que podrían producir excepciones. - Una vez que se produce una excepción en el
try
bloque, el flujo de control salta al primer controlador de excepciones asociado que está presente en cualquier parte de la pila de llamadas. En C#, lacatch
palabra clave se usa para definir un controlador de excepciones. - Si no hay ningún controlador de excepciones para una excepción determinada, el programa deja de ejecutarse con un mensaje de error.
- No detecte una excepción a menos que pueda controlarla y dejar la aplicación en un estado conocido. Si detecta
System.Exception
, vuelva a lanzarlo usando la palabra clavethrow
al final del bloquecatch
. - Si un
catch
bloque define una variable de excepción, puede usarla para obtener más información sobre el tipo de excepción que se produjo. - Las excepciones se pueden generar explícitamente mediante un programa mediante la
throw
palabra clave . - Los objetos exception contienen información detallada sobre el error, como el estado de la pila de llamadas y una descripción de texto del error.
- El código de un
finally
bloque se ejecuta independientemente de si se produce una excepción. Use unfinally
bloque para liberar recursos, por ejemplo, para cerrar las secuencias o archivos que se abrieron en eltry
bloque. - Las excepciones administradas en .NET se implementan sobre el mecanismo de control de excepciones estructurado de Win32. Para obtener más información, consulte Control estructurado de excepciones (C/C++) y Un curso intensivo en las profundidades del control de excepciones estructurado de Win32.
Especificación del lenguaje C#
Para obtener más información, vea Excepciones en la especificación del lenguaje C#. La especificación del lenguaje es el origen definitivo de la sintaxis y el uso de C#.