Comments 10
Вы patterns & practices (http://msdn.microsoft.com/ru-ru/library/ff953192(v=PandP.50).aspx) не читали?
0
А разве уже .Net Framework 4.5 на дворе? Вики утверждает, что последняя версия 4.0.
+1
Скоро будет 4.5, сейчас в стадии Preview, о чем говорит и Вики.
+4
Что значит скоро? Она уже давно доступен внутри Visual Studio 2011 Developer Preview
-5
А чем вызвано отсутствие регенерации исключений?
0
Сперва не поверил ряду высказываний (про первые листинги). Потом проверил Ваши примеры. Посмотрел результат компиляции ILDasm'ом. Чуть не заплакал, когда увидел Activator.CreateInstance().
Немного расстроился оборачиванию исключений в TargetInvocationException и TypeInitializationException, но после просмотра IL и объяснений из статьи, понимаю, почему так. Но всё равно, грустно это всё. Жаль, что местами C# не следует принципу наименьшего удивления.
Немного расстроился оборачиванию исключений в TargetInvocationException и TypeInitializationException, но после просмотра IL и объяснений из статьи, понимаю, почему так. Но всё равно, грустно это всё. Жаль, что местами C# не следует принципу наименьшего удивления.
+3
catch (AggregateException e)
{
ExceptionDispatchInfo di = ExceptionDispatchInfo.Capture(e.InnerException);
di.Throw();
return default(T);
}
Увидел такой код до того как прочитал статью, и внутри что-то ёкнуло :) Как мне кажется, вместо return default(T); лучше написать throw;
Хотя код не выполняется, но с throw как-то привычнее выглядит.
{
ExceptionDispatchInfo di = ExceptionDispatchInfo.Capture(e.InnerException);
di.Throw();
return default(T);
}
Увидел такой код до того как прочитал статью, и внутри что-то ёкнуло :) Как мне кажется, вместо return default(T); лучше написать throw;
Хотя код не выполняется, но с throw как-то привычнее выглядит.
0
Отличная статья, спасибо!
Есть правда одна неточность здесь:
Особенность платформы .NET заключается в том, что в ней не существует (а точнее, как мы вскоре увидим – не существовало) способа перехвата исключения в одном месте и последующего его генерирования в другом.
На самом деле он в некотором роде существует. Взять тот же ThreadAbortException, который на первый взгляд не перехватывается catch. На самом деле он перехватывается, и снова генерируется в конце блока catch. И может быть погашен только с помощью Thread.ResetAbort().
Что интересно, так это то, что делается это не на уровне CIL, а как-то иначе.
Есть правда одна неточность здесь:
Особенность платформы .NET заключается в том, что в ней не существует (а точнее, как мы вскоре увидим – не существовало) способа перехвата исключения в одном месте и последующего его генерирования в другом.
На самом деле он в некотором роде существует. Взять тот же ThreadAbortException, который на первый взгляд не перехватывается catch. На самом деле он перехватывается, и снова генерируется в конце блока catch. И может быть погашен только с помощью Thread.ResetAbort().
Что интересно, так это то, что делается это не на уровне CIL, а как-то иначе.
0
Sign up to leave a comment.
Повторная генерация исключений