可能重复:
C#中的"yield break;"是什么?
任何人都可以看到使用"break"或"return"无法实现的"yield break"语句.
这句话似乎完全没用.更重要的是,如果没有这个陈述,"收益率返回X"语句可以简化为"收益率X",这更具可读性.
我错过了什么?
Cam*_*and 64
为了给出一个代码示例,假设您要编写一个迭代器,如果源为null或为空,则不返回任何内容.
public IEnumerable<T> EnumerateThroughNull<T>(IEnumerable<T> source)
{
if (source == null)
yield break;
foreach (T item in source)
yield return item;
}
Run Code Online (Sandbox Code Playgroud)
如果没有yield break,就不可能在迭代器中返回一个空集.
yield break指定该方法应该停止返回结果."返回"本身不够好,甚至可能导致错误,因为该方法的返回类型必须是IEnumerable.
我不确定为什么还需要return关键字.我最好的猜测是,它有助于使声明的意图更清晰一些.
如果您有兴趣,本文将介绍幕后产量
产量休息和休息做完全不同的事情!看
for(int i = 0; i < 10; ++i) {
if(i > 5) { break; }
yield return i;
}
for(int v = 2710; v < 2714; v+=2) {
yield return v;
}
for(int s = 16; s < 147; ++s) {
if(s == 27) { yield break; }
else if(s > 17) { yield return s; }
}
Run Code Online (Sandbox Code Playgroud)
输出将是这些值的IEnumerable:0,1,2,3,4,5,2710,2712,18,19,20,21,22,23,24,25,26
这里有一些没有用处的方法,但它说明了你可以将yield break和break结合到同一个方法中,它们可以做两件不同的事情!Break只是突破循环,yield break完全结束了该方法.
我想没有使用返回的原因是因为你没有在方法中自己返回IEnumerable.此外,对于这种反复的情况,难道你不认为收益率突破比回报更清晰吗?我亲自做.
归档时间: |
|
查看次数: |
23585 次 |
最近记录: |