良率无法理解功能

Pin*_*015 2 .net c# visual-studio-2010

首先,我已经搜索了这个,但我仍然无法理解何时使用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];
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码和下面的代码之间有什么区别?

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];
    }
}
Run Code Online (Sandbox Code Playgroud)

你能告诉我什么时候使用产量吗?

pax*_*blo 10

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];
}
Run Code Online (Sandbox Code Playgroud)

nextDay在函数调用期间维护变量的事实意味着它可以用于循环遍历数组.