Sobes.tech
Middle

Existuje rozdíl v pořadí psaní bloků catch?

sobes.tech AI

Odpověď od AI

Ano, existují. Bloky catch jsou zpracovávány sekvenčně. Specifičtější výjimky by měly být před obecnějšími.

try
{
    // Kód, který může vyvolat výjimku
}
// Specifičtější výjimka
catch (System.FormatException ex)
{
    // Zpracování chyby formátu
}
// Méně specifická výjimka
catch (System.Exception ex)
{
    // Zpracování všech ostatních výjimek
}

Pokud umístíte obecnější výjimku jako první, pak blok catch specifičtější nikdy nebude dosažitelný pro výjimky, které z ní dědí. Například FormatException je dědicem Exception. Pokud catch (Exception ex) je první, zachytí i FormatException.

Nesprávný pořadí:

try
{
    // Kód, který může vyvolat výjimku
}
// Obecná výjimka
catch (System.Exception ex)
{
    // Zpracování všech výjimek, včetně FormatException
}
// Tento blok nikdy nebude dosažitelný pro FormatException,
// protože je již zachycen předchozím blokem
catch (System.FormatException ex)
{
    // Tento kód je nedosažitelný v tomto případě
}

Kompilátor C# vypíše varování nebo chybu pro nedosažitelný catch blok.