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 блок.