Обработка исключений C#, наконец, блокирует перед блоком catchC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Обработка исключений C#, наконец, блокирует перед блоком catch

Сообщение Anonymous »

Меня совершенно смущает то, как в C# создаются исключения. Если возникает исключение, в блоке try
1. оно передается в блок catch,
2. Если и только если блок catch перехватит его, будет выполнен блокfinally.
3. Блок «finally» выполняется последним при условии, что оператор catch его поймал.
Однако, когда я пытаюсь запустить приведенную ниже программу, на выходе выводятся A, B, а не BA. Что-то не так с мое понимание? Спасибо.
class Program
{
public static void Main(string[] args)
{
try
{
int a = 2;
int b = 10 / a;
try
{
if (a == 1)
a = a / a - a;
if (a == 2)
{
int[] c = { 1 };
c[8] = 9;
}
}
finally
{
Console.WriteLine("A");
}
}
catch (IndexOutOfRangeException e)
{
Console.WriteLine("B");
}
Console.ReadLine();
}
}

Исключение возникает в a==2, и я знаю, что внешний улов перехватит это исключение. Однако, наконец, выполняется первым? Есть ли причина, почему это отображается?
отредактировано
Из документации C# мы знаем, что блок Final выполняется независимо от того, возникло исключение или нет.< /p>
Однако мой блокfinally никогда не выполняется, и взамен я получаю ошибку времени выполнения
class Program
{
public static void Main(string[] args)
{
try
{
int a = 2;
int b = 10 / a;
try
{
if (a == 1)
a = a / a - a;
if (a == 2)
{
int[] c = { 1 };
c[8] = 9;
}
}
finally
{
Console.WriteLine("A");
}
}

finally{
Console.WriteLine("finally");
}

Console.ReadLine();
}
}


Подробнее здесь: https://stackoverflow.com/questions/530 ... atch-block
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Наконец, всегда запускается непосредственно перед возвратом в блоке try, тогда почему обновление в блоке, наконец, не вл
    Anonymous » » в форуме Python
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Что делает компилятор с блоком try-catch
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • C# Цикл for с try catch наконец
    Anonymous » » в форуме C#
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Исключение, выброшенное в операторе catch и, наконец,
    Anonymous » » в форуме JAVA
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Java try/catch - наконец-то полезность
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»