在C#中优先使用yield 的好处?


Where it is preferred to use yield return in c#?

本问题已经有最佳答案,请猛点这里访问。

我知道收益率是多少,但我不明白为什么要用它,只是因为它为我保存了一行列表声明吗?

这一定是更重要的。

它是什么?在哪里最好使用它?

*我问到在哪里和为什么使用它,它的优点是什么,而不是它是什么。


is it just because it saves me a row of a list declaration?

不,当您使用yield时,会得到延迟执行。这意味着当消费者消费商品时,您创建商品以获得收益。

如果您向列表中添加项目,然后将其返回,那么您必须先创建所有项目,然后消费者才能使用其中的任何项目。

例如,假设使用者调用您的方法并使用for循环来使用它,如下所示:

1
2
3
4
foreach(var item in GetMyLovelyItems())
{
   ...
}

如果GetMyLovelyItems返回一个列表,那么在GetMyLovelyItems方法返回并开始循环之前,将创建所有项。

另一方面,如果使用yield返回项,那么当循环从一个迭代转到下一个迭代时,将创建这些项。


它还可能与生成收益的代码的延迟/延迟执行相结合。


对于那些复杂的情况,您不能使用数组、列表或Enumerable.*方法。很少需要此功能。

最常见的使用模式是在某种循环中发出不能用Enumerable.*方法表示的项。

许多Enumerable方法是用yield实现的。

延期执行不需要yieldEnumerable也被推迟。

在任何情况下,您都可以编写自己的IEnumerable派生类。这是产生序列最具表现力和最乏味的方法。