Sobes.tech
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.