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.