【发布时间】:2017-03-31 16:42:26
【问题描述】:
在 javascript 中,我可以创建一个行为如下的生成器:
function* idMaker(){
var index = 0;
while(true)
yield index++;
}
var gen = idMaker();
console.log(gen.next().value); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
等效的 C# 会是什么样子?
我想知道这是否可行:
static System.Collections.Generic.IEnumerable<int> MakeId()
{
int index = 0;
while (true)
yield return index++;
}
但就我目前对 C# 的了解而言,上述内容无法按我的预期工作,而是无限循环。
【问题讨论】:
-
C# 版本像函数一样返回,所以
while (true)将锁定您的应用程序,直到您的 RAM 用完为止。 -
为什么它的行为不符合您的意图?
-
yield 关键字使生成器惰性求值,因此 while 循环不断被中断并且不会永远运行。
-
“不知道这能不能用”好吧,试试看。
-
看到它的工作:ideone.com/PVvkww
标签: c# iterator generator enumerable