首先,我已经对此进行了搜索,但是我仍然不明白何时使用yield。
例如,我有以下代码:
string[] days = { "Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat" };
public System.Collections.IEnumerator GetEnumerator()
{
for (int i = 0; i < days.Length; i++)
{
yield return days[i];
}
}
上面的代码和下面的代码有什么区别?
string[] days = { "Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat" };
public System.Collections.IEnumerator GetEnumerator()
{
for (int i = 0; i < days.Length; i++)
{
return days[i];
}
}
您能告诉我何时使用收益吗?
最佳答案
return
方法不记得您在数组中的位置。您每次使用它都会返回星期日,这仅仅是因为它每次都从零开始循环。
使用yield
更多(至少从概念上来说)“我将返回此值,但是,下次您致电给我时,我将从上次中断的地方(在循环内)取回”。
通过使用静态变量来记住您的位置,可以在C语言中完成类似的操作:
char *nextDay () {
static char *days[] = { "Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat" };
static int nextDay = -1;
nextDay = (nextDay + 1) % (sizeof (days) / sizeof (*days));
return days[nextDay];
}
nextDay
变量是在函数调用之间维护的事实,这意味着可以将其用于循环遍历数组。关于c# - 产量无法理解其功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11043237/