Sobes.tech
Middle

Există vreo diferență în ordinea în care se scriu blocurile catch?

sobes.tech AI

Răspuns de la AI

Da, există. Blocurile catch sunt procesate secvențial. Excepțiile mai specifice trebuie să vină înaintea celor mai generale.

try
{
    // Cod care poate genera o excepție
}
// Excepție mai specifică
catch (System.FormatException ex)
{
    // Tratarea erorii de format
}
// Excepție mai puțin specifică
catch (System.Exception ex)
{
    // Tratarea tuturor celorlalte excepții
}

Dacă plasezi excepția mai generală prima, atunci blocul catch mai specific nu va fi niciodată atins pentru excepțiile care moștenesc de la cea mai generală. De exemplu, FormatException moștenește de la Exception. Dacă catch (Exception ex) este primul, va captura și FormatException.

Secvența incorectă:

try
{
    // Cod care poate genera o excepție
}
// Excepție generală
catch (System.Exception ex)
{
    // Tratarea tuturor excepțiilor, inclusiv FormatException
}
// Acest bloc nu va fi niciodată atins pentru FormatException,
// deoarece este deja capturat de blocul anterior
catch (System.FormatException ex)
{
    // Acest cod nu va fi atins în acest caz
}

Compilatorul C# va emite un avertisment sau o eroare pentru un bloc catch inatins.