Я буду именовать блоки когда по номеру, который они выводят.
Как я понимаю, в блоке '2', мы явно не указываем тип исключения, то есть результат работы программы должен быть 1 2 3 5 6
, а на самом деле имеем 1 2 3 4 6
. Почему так?
Исключение из блока '1' мы уже обработали в '2', а в '2' у нас уже не NullReferenceException
, а просто throw
.
static void Main(string[] args)
{
try
{
try
{
System.Console.WriteLine("1");
throw new NullReferenceException();
}
catch
{
System.Console.WriteLine("2");
throw; // интересует это
}
finally
{
System.Console.WriteLine("3");
}
}
catch(NullReferenceException ex)
{
System.Console.WriteLine("4");
}
catch(Exception ex)
{
System.Console.WriteLine("5");
}
finally
{
System.Console.WriteLine("6");
}
}
Throw перебрасывает исключение, пойманное в catch так, как будто бы catch его не поймал. В вашем случае throw бросает то же исключение (тот же объект), что был пойман - т.е. брошенный выше NullReferenceException.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как правильно использовать entity framework? Нужно создавать DbContext для каждого вызова, или создать один раз и использовать всё время жизни приложения?
Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском»
Как должна выглядеть строка подключения к MS SQL Server 2008 при условии, что экземпляр MS SQL Server установлен на одном из удалённых компьютеров, расположенных...