产量无法理解其功能

产量无法理解其功能

首先,我已经对此进行了搜索,但是我仍然不明白何时使用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/

10-10 16:17