Sobes.tech
Middle

Има ли разлика в реда, по който се пишат блоковете catch?

sobes.tech AI

Отговор от AI

Да, има. Блоковете catch се обработват последователно. По-специфичните изключения трябва да идват преди по-общите.

try
{
    // Код, който може да предизвика изключение
}
// По-специфично изключение
catch (System.FormatException ex)
{
    // Обработка на грешка във формата
}
// По-малко специфично изключение
catch (System.Exception ex)
{
    // Обработка на всички останали изключения
}

Ако поставите по-общото изключение първо, тогава по-специфичният блок catch никога няма да бъде достигнат за изключения, които наследяват от по-общото. Например, FormatException е наследник на Exception. Ако catch (Exception ex) е първи, той ще улови и FormatException.

Неправилна последователност:

try
{
    // Код, който може да предизвика изключение
}
// Общото изключение
catch (System.Exception ex)
{
    // Обработка на всички изключения, включително FormatException
}
// Този блок никога няма да бъде достигнат за FormatException,
// защото вече е уловен от предишния блок
catch (System.FormatException ex)
{
    // Този код е недостъпен в този случай
}

Компилаторът на C# ще издаде предупреждение или грешка за недостъпен catch блок.