Sobes.tech
Middle

C'è qualche differenza nell'ordine in cui si scrivono i blocchi catch?

sobes.tech AI

Risposta dell'AI

Sì, ci sono. I blocchi catch vengono elaborati in sequenza. Le eccezioni più specifiche devono venire prima di quelle più generali.

try
{
    // Codice che può generare un'eccezione
}
// Eccezione più specifica
catch (System.FormatException ex)
{
    // Gestione dell'errore di formato
}
// Eccezione meno specifica
catch (System.Exception ex)
{
    // Gestione di tutte le altre eccezioni
}

Se si mette l'eccezione più generale per prima, allora il blocco catch più specifico non sarà mai raggiunto per le eccezioni che ereditano dalla più generale. Ad esempio, FormatException è un'erede di Exception. Se catch (Exception ex) viene prima, catturerà anche FormatException.

Sequenza errata:

try
{
    // Codice che può generare un'eccezione
}
// Eccezione generale
catch (System.Exception ex)
{
    // Gestione di tutte le eccezioni, inclusa FormatException
}
// Questo blocco non sarà mai raggiunto per FormatException,
// perché già catturato dal blocco precedente
catch (System.FormatException ex)
{
    // Questo codice è inaccessibile in questo caso
}

Il compilatore C# emetterà un avviso o un errore per un blocco catch inaccessibile.