キャッチ付きのtryブロック内にreturnが表示されないのはなぜですか?
以下は大丈夫です: 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); } (議論のために)WriteLinetryブロック内の呼び出しのいずれかによって例外がスローされたと仮定します。catchブロックで実行を続けることの問題は何ですか? もちろん、yield return部分は(現在のところ)何もスローすることができませんが、なぜそれが原因で、try/のcatch前または後にスローされた例外を処理するための囲み/ …