Come gestire un'eccezione usando try-catch

Lo scopo di un blocco try-catch è quello di rilevare e gestire un'eccezione generata da codice in esecuzione. Alcune eccezioni possono essere gestite in un blocco catch e il problema viene risolto senza che l'eccezione venga generata nuovamente. Molto spesso, invece, l'unica cosa che si possa fare è assicurarsi che venga generata l'eccezione appropriata.

Esempio

In questo esempio, IndexOutOfRangeException non è l'eccezione più appropriata: ArgumentOutOfRangeException ha più senso per il metodo perché l'errore è causato dall'argomento index passato dal chiamante.

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

Commenti

Il codice che genera un'eccezione è racchiuso nel blocco try. Subito dopo di essa viene aggiunta un'istruzione catch per gestire IndexOutOfRangeException, se si verifica. Il blocco catch gestisce l'eccezione IndexOutOfRangeException e genera al suo posto l'eccezione più appropriata ArgumentOutOfRangeException. Per offrire al chiamante quante più informazioni possibili, specificare l'eccezione originale come InnerException della nuova eccezione. Poiché la proprietà InnerException è readonly, è necessario assegnarla nel costruttore della nuova eccezione.