Middle
Kas on erinevus, kuidas catch-blokke kirjutada?
sobes.tech AI
Vastus AI-lt
Jah, see on olemas. catch plokid töötavad järjestikku. Spetsiifilisemad erandid peaksid tulema enne üldisemaid.
try
{
// Kood, mis võib põhjustada erandi
}
// Spetsiifilisem erand
catch (System.FormatException ex)
{
// Formaadi vea töötlemine
}
// Vähem spetsiifiline erand
catch (System.Exception ex)
{
// Kõigi teiste erandite töötlemine
}
Kui paned kõigepealt üldisema erandi, siis spetsiifilisem catch plokk ei saavutata kunagi nende erandite jaoks, mis sellest pärivad. Näiteks, FormatException pärib Exception-ist. Kui catch (Exception ex) on esimene, siis see haarab ka FormatException.
Vale järjestus:
try
{
// Kood, mis võib põhjustada erandi
}
// Üldine erand
catch (System.Exception ex)
{
// Kõigi erandite töötlemine, kaasa arvatud `FormatException`
}
// See plokk ei saavutata kunagi `FormatException` jaoks,
// sest see on juba eelnevalt haaratud
catch (System.FormatException ex)
{
// See kood on selles olukorras saavutatamatu
}
C# kompilaator annab hoiatuse või vea selle kohta, et plokk on saavutatamatu.