先了解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开发跳槽
觉得不错,请点个在看 呀