首先,我已经对此进行了搜索,但我仍然无法理解何时使用 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];
}
}
你能告诉我什么时候使用 yield 吗?
最佳答案
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# - yield 看不懂的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11043237/