yield

關鍵詞:延遲、當前位置保留、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關鍵字的時候,返回類型必須是IEnumerableIEnumerable<T>IEnumeratorIEnumerator<T>code

MSDN:http://msdn.microsoft.com/zh-cn/library/vstudio/9k7k7cf0.aspxblog

相關文章
相關標籤/搜索