W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
foreach
語句是枚舉器的消費者。
迭代器是枚舉器的生成器。
在這個例子中,我們使用迭代器返回一系列斐波納契數(shù):
using System; using System.Collections.Generic; class Main { static void Main() { foreach (int fib in Fibs(6)){ Console.Write (fib + " "); } } static IEnumerable<int> Fibs (int fibCount) { for (int i = 0, prevFib = 1, curFib = 1; i < fibCount; i++) { yield return prevFib; int newFib = prevFib+curFib; prevFib = curFib; curFib = newFib; } } }
yield
return語句返回該枚舉器的下一個元素。
迭代器是一個包含一個或多個 yield
語句的方法,屬性或索引器。
迭代器必須返回以下四個接口之一:
// Enumerable interfaces System.Collections.IEnumerable System.Collections.Generic.IEnumerable<T> // Enumerator interfaces System.Collections.IEnumerator System.Collections.Generic.IEnumerator<T>
允許多個yield語句。 例如:
class Test { static void Main() { foreach (string s in Foo()) Console.WriteLine(s); // Prints "One","Two","Three" } static IEnumerable<string> Foo() { yield return "One"; yield return "Two"; yield return "Three"; } }
yield break
語句指示迭代器塊應提早退出,而不返回更多元素。
以下代碼顯示了如何使用yield break:
static IEnumerable<string> Foo (bool breakEarly) { yield return "One"; yield return "Two"; if (breakEarly) yield break; yield return "Three"; }
返回語句在迭代器塊中是非法的,請使用yield break。
以下代碼顯示了如何僅輸出斐波納契數(shù)字:
using System; using System.Collections.Generic; class Main { static void Main() { foreach (int fib in EvenNumbersOnly (Fibs(6))) Console.WriteLine (fib); } static IEnumerable<int> Fibs (int fibCount) { for (int i = 0, prevFib = 1, curFib = 1; i < fibCount; i++) { yield return prevFib; int newFib = prevFib+curFib; prevFib = curFib; curFib = newFib; } } static IEnumerable<int> EvenNumbersOnly (IEnumerable<int> sequence) { foreach (int x in sequence) if ((x % 2) == 0) yield return x; } }
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: