【发布时间】:2012-11-11 12:31:39
【问题描述】:
除了从函数返回或让函数完成到最后,它有什么不同吗?注意 VB.NET 没有 yield break,但需要用 iterator 关键字标记函数。
【问题讨论】:
-
没有那些例子说明 yield break 的作用,但它没有解释与简单的返回或让函数自然退出是否有任何区别。
除了从函数返回或让函数完成到最后,它有什么不同吗?注意 VB.NET 没有 yield break,但需要用 iterator 关键字标记函数。
【问题讨论】:
谈到C#,如果你想编写一个迭代器,如果源为空或为空则不返回任何内容。这是一个例子:
public IEnumerable<T> EnumerateThroughNull<T>(IEnumerable<T> source)
{
if (source == null)
yield break;
foreach (T item in source)
yield return item;
}
如果没有yield break,就不可能在迭代器内返回空集。它还指定迭代器已经结束。您可以将yield break 视为不返回值的返回语句。
int i = 0;
while (true)
{
if (i < 5)
yield return i;
else
yield break; // note that i++ will not be executed after this statement
i++;
}
【讨论】:
yield break,就不可能在迭代器中返回一个空集”是误导性的——如果你没有yield break,这只是不方便。但很有可能。例如,在您的第一个示例中,您可以只使用 if(source != null) { foreach (T item in source) yield return item; } - 它是一个产生空序列的迭代器块。