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.