相关疑难解决方法(0)

任何人都可以向我解释IEnumerable和IEnumerator吗?

任何人都可以向我解释IEnumerable和IEnumerator吗?

例如,什么时候在foreach上使用它?IEnumerable和IEnumerator之间有什么区别?为什么我们需要使用它?

c# ienumerable ienumerator

256
推荐指数
11
解决办法
19万
查看次数

为什么不能在带有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#迭代器和生成器,以及如何利用它们

我是一名VB.Net开发人员,在C#中有点新手,在查看C#文档时,我通过迭代器和生成器来了,无法完全理解使用,我有任何人可以解释(在vb中有洞察力;如果可能的话)

.net c# iterator generator enumerators

14
推荐指数
1
解决办法
1万
查看次数