- IEnumerable 接口
公开枚举数,该枚举数支持在非泛型集合上进行简单迭代。
下面的代码示例演示如何实现自定义集合的 IEnumerable 和 IEnumerator 接口。在此示例中,没有显式调用这些接口的成员,但实现了它们,以便支持使用 foreach循环访问该集合 (摘自MSDN)
- yield 关键字
yield 关键字向编译器指示它所在的方法或属性是迭代器块。 编译器生成一个类来实现迭代器块中表示的行为。 在迭代器块中,yield 关键字与 return 关键字结合使用,向枚举器对象提供值。 这是一个返回值,例如,在 foreach 语句的每一次循环中返回的值。 yield 关键字也可与 break 结合使用,表示迭代结束。下面的示例演示两种形式的 yield 语句。
yield 语句只能出现在 iterator 块中,这种块可作为方法、运算符或访问器的主体实现。 这类方法、运算符或访问器的体受以下约束的控制:
-
不允许不安全块。
-
yield return 语句不能放在 try-catch 块中的任何位置。 该语句可放在后跟 finally 块的 try 块中。
-
yield break 语句可放在 try 块或 catch 块中,但不能放在 finally 块中。
yield 语句不能出现在匿名方法中。
在下面的示例中,迭代器块(这里是方法 Power(int number, int power))中使用了 yield 语句。 当调用 Power 方法时,它返回一个包含数字幂的可枚举对象。 注意 Power 方法的返回类型是 System.Collections.IEnumerable(一种迭代器接口类型)(引自MSDN)
之前的例子也可以用yield关键字改写成下面的形式: