先了解yield关键字:

yield 关键字微软官方又称上下文关键字,是向编译器指示它所在的方法是迭代器块。编译器生成一个类来实现迭代器块中表示的行为。在迭代器块中,yield 关键字与 return 关键字结合使用,向枚举器对象提供值。这是一个返回值,例如,在 foreach 语句的每一次循环中返回的值。yield 关键字也可与 break 结合使用,表示迭代结束。

语法:

yieldreturn<expression>; //返回到IEnumerable的数据

yieldbreak;

先来看一段代码:

staticIEnumerable< int> Numbers( intn )

intcurrent = 1, next = 1;

for( inti = 0; i < n; ++i)

yieldreturncurrent;

//下面记住上一结果和下一个结果的计算。

next = current + (current = next);

staticvoidMain( string[] args )

//调用

foreach( varitem inNumbers( 10)) //居然返回IEnumerable

Console.WriteLine(item.ToString);

Console.ReadLine;

//输出结果:1,1,2,5,8,13,21,34,55

这段代码是计算 斐波那契数列的算法,循环体仅仅用了四行代码,即可实现,居然可以这样实现,是不是很神奇。yield可以大大减少迭代器代码,让代码写起来更加轻松。之前通常计算 斐波那契数列用递归和纯循环来完成。

如果想在中途不执行,比如当等于34时就返回,如下。

for(int i = 0; i < n; ++i)

yieldreturncurrent;

if(current == 34)

yieldbreak;

//下面记住上一结果和下一个结果的计算。

next= current + (current = next);

当然不是所有情况都适合使用,比如在 try-catch 块中就不适用,详细说明请浏览微软官网:/

结语

斐波那契数列的算法是面试常考的算法题之一,小编都遇到几次了,如果在面试的过程中用 yield关键字来低代码量实现,那么一定是加分项。对于yield 关键字你如果有啥看法,可以留言讨论。

版权声明:本文来源于网友收集或网友提供,仅供学习交流之用,如果有侵权,请转告版主或者留言,本公众号立即删除。

支持小薇

领腾讯云618福利红包 :

618抢先购 爆款2核2G4M 40GSSD云服务器劲爆45元,更多浏览

链接:

关注: DotNet开发跳槽

觉得不错,请点个在看 呀