Меня совершенно смущает то, как в 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
Обработка исключений C#, наконец, блокирует перед блоком catch ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение