当前位置:  开发笔记 > 编程语言 > 正文

什么是收益率突破的用途?

如何解决《什么是收益率突破的用途?》经验,为你挑选了3个好方法。

为了给出一个代码示例,假设您要编写一个迭代器,如果源为null或为空,则不返回任何内容.

public IEnumerable EnumerateThroughNull(IEnumerable source)
{
    if (source == null)
        yield break;

    foreach (T item in source)
        yield return item;
}

如果没有yield break,就不可能在迭代器中返回一个空集.



1> Cameron MacF..:

为了给出一个代码示例,假设您要编写一个迭代器,如果源为null或为空,则不返回任何内容.

public IEnumerable EnumerateThroughNull(IEnumerable source)
{
    if (source == null)
        yield break;

    foreach (T item in source)
        yield return item;
}

如果没有yield break,就不可能在迭代器中返回一个空集.


好吧,如果source!= null,我们可以只使if语句运行,但是点了

2> Bob..:

yield break指定该方法应该停止返回结果."返回"本身不够好,甚至可能导致错误,因为该方法的返回类型必须是IEnumerable.

我不确定为什么还需要return关键字.我最好的猜测是,它有助于使声明的意图更清晰一些.

如果您有兴趣,本文将介绍幕后产量

在C#yield关键字的幕后


@Dave,nope,yield break会停止返回的任何项目,但不会(也不能)取消已经返回的项目.

3> Ray Hidayat..:

产量休息和休息做完全不同的事情!看

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; }
}

输出将是这些值的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.此外,对于这种反复的情况,难道你不认为收益率突破比回报更清晰吗?我亲自做.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有