Middle
Ar yra skirtumas, kaip rašyti catch blokus?
sobes.tech AI
Atsakymas iš AI
Taip, yra. catch blokai vykdomi seka. Daugiau specifinės išimtys turi būti prieš bendresnes.
try
{
// Kodas, kuris gali sukelti išimtį
}
// Daugiau specifinė išimtis
catch (System.FormatException ex)
{
// Formatavimo klaidos tvarkymas
}
// Mažiau specifinė išimtis
catch (System.Exception ex)
{
// Visų kitų išimčių tvarkymas
}
Jei pirmiausia padėsite bendresnę išimtį, tada labiau specifinis catch blokas niekada nebus pasiektas tiems išimtims, kurios iš jos paveldi. Pavyzdžiui, FormatException paveldi iš Exception. Jei catch (Exception ex) bus pirmas, jis taip pat sugautų FormatException.
Netinkama seka:
try
{
// Kodas, kuris gali sukelti išimtį
}
// Bendra išimtis
catch (System.Exception ex)
{
// Visų išimčių tvarkymas, įskaitant `FormatException`
}
// Šis blokas niekada nebus pasiektas `FormatException`,
// nes jis jau sugautas ankstesniame bloke
catch (System.FormatException ex)
{
// Šis kodas šiuo atveju nepasiekiamas
}
C# kompiliatorius išmes įspėjimą arba klaidą dėl nepasiekiamo catch bloko.