1.yield return 语句,由于yield return 并不对应多余的il指令。所以编译器就会在编译的时候,生成一个实现Ienumator接口的类.并且自动维护该类的状态.比如movenext, 2. 使用yield return 很容易实现递归调用中的迭代器. 如果以上的问题,不使用yield return的话,可想而知.要么你先把所有的结果暂时放到一个对象集合中. 可是这样就以为着在迭代之前一定要计算号. 要么可能你的movenext 就相当的复杂了. .NET 编译生成的代码其实利用了state machine. 代码量也很大. 类似迭代的调用,比如二叉树遍历 用yield return 就很方便了.另外还有常说的pipeline模式也很方便了. 可是yield return 还是有一些缺陷. 比如如果GetFiles 有一个参数是ref 或者 out, 那这个state machine就很难去维护状态了. 事实上,yield return那是不支持方法带有ref或者out参数的情况.
在迭代器块中用于向枚举数对象提供值或发出迭代结束信号。它的形式为下列之一: 复制代码
yield return <expression>; 备注
示例
using System; namespace yieldList static void Main() } |
|
来自: woshishenxian... > 《c#》