關鍵詞:延遲、當前位置保留、IEnumerableexpress
例:函數
static void Main(string[] args) { IEnumerable ie = funyield(); foreach (string s in ie) { Console.WriteLine(s); } Console.ReadKey(); } public static IEnumerable funyield() { yield return "ff"; yield return "DD"; yield return "bb"; }
1.延遲
當Main函數執行時,執行完IEnumerable ie=funyield();語句後,實際根本沒有執行funyield方法,當以後對其進行迭代的時候纔會去執行。
一旦咱們在一個返回類型爲IEnumerable或IEnumerable<T>的方式中經過yield return 返回集合元素,意味着這個方法中的操做會被」延後執行「---操做的真正執行不是發生在調用時候,而是延後到對返回的集合進行迭代的時候。ui
2.保留位置
對上述代碼 打斷點,再執行時會發發現,foreach每次的迭代都要去執行funyield方法,而且一次執行返回的數據,第一次執行返回 ff ,保留位置,下次再迭代的時候就要從下一個開始,即執行返回 DD spa
3.IEnumerable
在使用yield關鍵字的時候,返回類型必須是IEnumerable、IEnumerable<T>、IEnumerator或 IEnumerator<T>code
MSDN:http://msdn.microsoft.com/zh-cn/library/vstudio/9k7k7cf0.aspxblog