Sobes.tech
Middle

Existuje rozdiel v poradí písania blokov catch?

sobes.tech AI

Odpoveď od AI

Áno, existujú. Bloky catch sa spracovávajú sekvenčne. Špecifickejšie výnimky by mali prísť skôr ako tie všeobecnejšie.

try
{
    // Kód, ktorý môže spôsobiť výnimku
}
// Špecifickejšia výnimka
catch (System.FormatException ex)
{
    // Spracovanie chyby formátu
}
// Menej špecifická výnimka
catch (System.Exception ex)
{
    // Spracovanie všetkých ostatných výnimiek
}

Ak umiestnite všeobecnejšiu výnimku ako prvú, tak blok catch špecifickejší nikdy nebude dosiahnuteľný pre výnimky, ktoré z nej dedičia. Napríklad, FormatException je dedičom Exception. Ak catch (Exception ex) je prvý, zachytí aj FormatException.

Nesprávny poradok:

try
{
    // Kód, ktorý môže spôsobiť výnimku
}
// Všeobecná výnimka
catch (System.Exception ex)
{
    // Spracovanie všetkých výnimiek, vrátane FormatException
}
// Tento blok nikdy nebude dosiahnuteľný pre FormatException,
// pretože je už zachytený predchádzajúcim blokom
catch (System.FormatException ex)
{
    // Tento kód je nedosiahnuteľný v tomto prípade
}

Kompilátor C# vydá varovanie alebo chybu pre nedosiahnuteľný catch blok.