Procedimientos para controlar una excepción mediante Try y Catch

El propósito de un bloque try-catch es detectar y controlar una excepción generada por código en funcionamiento. Algunas excepciones se pueden controlar en un bloque catch y es posible resolver el problema sin que se vuelva a producir la excepción, pero la mayoría de las veces lo único que se puede hacer es asegurarse de que se produzca la excepción adecuada.

Ejemplo

En este ejemplo, IndexOutOfRangeException no es la excepción más adecuada. Tiene más sentido la excepción ArgumentOutOfRangeException para el método, ya que el error lo provoca el argumento index que pasa el autor de la llamada.

static int GetInt(int[] array, int index)
{
    try
    {
        return array[index];
    }
    catch (IndexOutOfRangeException e)  // CS0168
    {
        Console.WriteLine(e.Message);
        // Set IndexOutOfRangeException to the new exception's InnerException.
        throw new ArgumentOutOfRangeException("index parameter is out of range.", e);
    }
}

Comentarios

El código que produce una excepción está incluido en el bloque try. Se agrega una instrucción catch inmediatamente después para controlar IndexOutOfRangeException, si se produce. El bloque catch controla la excepción IndexOutOfRangeException y produce en su lugar la excepción ArgumentOutOfRangeException, más adecuada. Para proporcionar al autor de la llamada tanta información como sea posible, considere la posibilidad de especificar la excepción original como InnerException de la nueva excepción. Dado que la propiedad InnerException es read-only, debe asignarla en el constructor de la nueva excepción.