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在函数调用期间维护变量的事实意味着它可以用于循环遍历数组.
| 归档时间: |
|
| 查看次数: |
178 次 |
| 最近记录: |