Sobes.tech
Middle

Vai ir atšķirība, kā rakstīt catch blokus?

sobes.tech AI

Atbilde no AI

Jā, tas ir. catch bloki tiek apstrādāti secīgi. Jābūt vispirms norādītākajām izņēmumiem, kas ir specifiskāki.

try
{
    // Kods, kas var izraisīt izņēmumu
}
// Specifiskāks izņēmums
catch (System.FormatException ex)
{
    // Formāta kļūdas apstrāde
}
// Mazāk specifisks izņēmums
catch (System.Exception ex)
{
    // Visu citu izņēmumu apstrāde
}

Ja vispirms novietosit vispārīgāku izņēmumu, tad specifiskāks catch bloks nekad nebūs sasniedzams tiem izņēmumiem, kas no tā mantojas. Piemēram, FormatException ir manto no Exception. Ja catch (Exception ex) ir pirmais, tas arī noķers FormatException.

Nepareiza secība:

try
{
    // Kods, kas var izraisīt izņēmumu
}
// Vispārīga izņēmuma apstrāde
catch (System.Exception ex)
{
    // Visu izņēmumu apstrāde, ieskaitot `FormatException`
}
// Šis bloks nekad nebūs sasniedzams `FormatException`,
// jo tas jau ir noķerts iepriekšējā blokā
catch (System.FormatException ex)
{
    // Šis kods šajā gadījumā ir nepieejams
}

C# kompilators izdos brīdinājumu vai kļūdu par nepieejamu catch bloku.