Почему нельзя вернуть return в блоке try с уловом?

Следующее нормально:

try
{
    Console.WriteLine("Before");

    yield return 1;

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

finally блок запускается, когда все завершается (IEnumerator<T> опорыIDisposable обеспечить способ обеспечить это, даже если перечисление прекращено до его завершения).

Но это не хорошо

try
{
    Console.WriteLine("Before");

    yield return 1;  // error CS1626: Cannot yield a value in the body of a try block with a catch clause

    Console.WriteLine("After");
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
}

Предположим (ради аргумента), что одно или другое изWriteLine звонки внутри блока try. В чем проблема с продолжением казни вcatch блок?

Конечно, часть возврата дохода (в настоящее время) не может бросить что-либо, но почему это должно мешать нам иметь вложениеtry/catch иметь дело с исключениями, возникшими до или послеyield return?

Обновить: Там естьИнтересный комментарий от Эрика Липперта здесь - кажется, у них уже достаточно проблем с реализацией поведения try / finally!

РЕДАКТИРОВАТЬ: страница MSDN на эту ошибку:http://msdn.microsoft.com/en-us/library/cs1x15az.aspx, Хотя это не объясняет почему.

Ответы на вопрос(5)

Ваш ответ на вопрос