哪里最好在c#中使用yield return?
这个问题在这里已经有了答案:
是不是因为它为我节省了一行列表声明?
不。当你使用yield
你会得到延期执行。 这意味着您创建消费者消费项目时产生的项目。
如果您将项目添加到列表中然后将其返回,那么您必须先创建所有项目,然后消费者才能使用它们中的任何项目。
例如,假设消费者调用您的方法并使用for循环来消耗它,如下所示:
foreach(var item in GetMyLovelyItems())
{
...
}
如果GetMyLovelyItems
返回一个列表,则所有项目将在GetMyLovelyItems
方法返回并开始循环之前创建。
另一方面,如果使用yield
来返回项目,那么随着循环从一个迭代到下一个迭代,项目将被创建。
它也可能与生成收益的代码的延迟/缓冲执行相结合
适用于那些复杂的情况下,您无法使用数组,列表或Enumerable.*
方法进行应用。 这个功能很少需要。
最常见的使用模式是使用Enumerable.*
方法无法表达某种循环中的项目。
许多Enumerable
方法都是用yield
来实现的。
延期执行不需要 yield
。 Enumerable
被延迟。
无论如何,你可以编写你自己的IEnumerable
派生类。 这是产生序列最具表现力和最乏味的方式。
上一篇: Where it is preferred to use yield return in c#?
下一篇: Access VerticalScroll property of Panel in the Compact Framework