为什么收益率回报不能出现在带有捕获的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); } 假设(出于参数考虑)WriteLinetry块中的一个或其他调用引发了异常。继续执行catch块有什么问题? 当然,收益率返回部分(当前)无法抛出任何东西,但是为什么那应该阻止我们封闭try/ catch处理在a之前或之后抛出的异常yield …