Middle
Da li postoji razlika u redosledu pisanja catch blokova?
sobes.tech АИ
Одговор од АИ
Da, postoji. Blokovi catch se obrađuju sekvencijalno. Specifičniji izuzeci treba da budu pre opštijih.
try
{
// Kod koji može izazvati izuzetak
}
// Specifičniji izuzetak
catch (System.FormatException ex)
{
// Obrada greške formata
}
// Manje specifičan izuzetak
catch (System.Exception ex)
{
// Obrada svih ostalih izuzetaka
}
Ako stavite opštiji izuzetak prvi, tada će blok catch specifičniji nikada biti dostupan za izuzetke koji od njega nasledjuju. Na primer, FormatException je naslednik Exception. Ako je catch (Exception ex) prvi, uhvatiće i FormatException.
Neispravan redosled:
try
{
// Kod koji može izazvati izuzetak
}
// Opšta izuzetak
catch (System.Exception ex)
{
// Obrada svih izuzetaka, uključujući FormatException
}
// Ovaj blok nikada neće biti dostupan za FormatException,
// jer je već uhvaćen prethodnim blokom
catch (System.FormatException ex)
{
// Ovaj kod je nedostupan u ovom slučaju
}
Kompajler C# će izdati upozorenje ili grešku za nedostupan catch blok.