相关疑难解决方法(0)

为什么不能在带有catch的try块内出现yield return?

以下是可以的:

try
{
    Console.WriteLine("Before");

    yield return 1;

    Console.WriteLine("After");
}
finally
{
    Console.WriteLine("Done");
}
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)

假设(为了参数)WriteLinetry块中的一个或另一个调用抛出异常.在catch块中继续执行有什么问题?

当然,收益率回报部分(目前)无法抛出任何东西,但是为什么要阻止我们封闭try/ catch处理在之前或之后抛出的异常yield return

更新:Eric Lippert在这里有一个有趣的评论 - 似乎他们已经有足够的问题正确实现try/finally行为!

编辑:此错误的MSDN页面是:http://msdn.microsoft.com/en-us/library/cs1x15az.aspx.但这并没有解释为什么.

c# exception yield-keyword

90
推荐指数
2
解决办法
2万
查看次数

标签 统计

c# ×1

exception ×1

yield-keyword ×1