我知道收益率是多少,但我无法理解为什么要使用它, 是因为它为我节省了一行列表声明吗?
它必须是更多的东西。
什么是最佳使用方式?
*我问过在哪里以及为什么要使用它,它的优点是什么,而不是它的优点。
答案 0 :(得分:6)
是不是因为它为我节省了一行列表声明?
没有。当您使用yield
时,您将获得延期执行。这意味着您可以在消费者消费物品时创建要产生的物品。
如果您将项目添加到列表中然后将其返回,则必须先创建所有项目,然后消费者才能使用其中任何项目。
例如,假设使用者调用您的方法并使用for循环来使用它:
foreach(var item in GetMyLovelyItems())
{
...
}
如果GetMyLovelyItems
返回一个列表,那么在GetMyLovelyItems
方法返回并循环开始之前将创建所有项目。
另一方面,如果使用yield
返回项目,则会在循环从一次迭代到下一次迭代时创建项目。
答案 1 :(得分:2)
适用于那些无法使用数组,列表或Enumerable.*
方法进行处理的复杂情况。很少需要此功能。
最常见的使用模式是在某种循环中发出无法用Enumerable.*
方法表达的项目。
许多Enumerable
方法都是使用yield
实现的。
yield
。 Enumerable
也被推迟。
在任何情况下,您都可以编写自己的IEnumerable
派生类。这是产生序列最具表现力和最繁琐的方式。
答案 2 :(得分:2)
它还可能与生成yield
的代码的延迟/延迟执行相结合