1. 程式人生 > WINDOWS開發 >C# Yield的使用

C# Yield的使用

yield關鍵字用於遍歷迴圈中,yield return用於返回IEnumerable,yield break用於終止迴圈遍歷

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using log4net;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> list = new List<int>();
            for (int i = 1; i < 101; i++)
                list.Add(i);

            //獲取偶數集合
            //TestMethod(GetAllEvenNumber(list));
            TestMethod(GetAllEvenNumberByYield(list));
            Console.ReadLine();
        }

        public static void TestMethod(IEnumerable<int> param)
        {
            foreach (var item in param)
            {
                Console.WriteLine(item);//輸出偶數集合
            }
        }

        public static IEnumerable<int> GetAllEvenNumber(IEnumerable<int> param)
        {
            List<int> result = new List<int>();
            foreach (var item in param)
            {
                if (item % 2 == 0)
                {
                    result.Add(item);
                }
            }
            return result;
        }

        public static IEnumerable<int> GetAllEvenNumberByYield(IEnumerable<int> param)
        {
            foreach (var item in param)
            {
                if (item % 2 == 0)
                {
                    yield return item;
                }
            }
        }
    }
}

GetAllEvenNumber方法,是把結果集全部載入到記憶體中再遍歷;GetAllEvenNumberByYield方法,客戶端每呼叫一次,yield return就返回一個值給客戶端,是"按需供給",這樣有個好處,我們假如有1000000個數據,我們需要得到裡面的耦合,當我們通過這個方法得到一個耦合會立馬顯示在控制檯上。而不是等很久也就把全部偶數都查詢到存入集合當中,然後在一一遍歷輸出。這個好處是很大的。比如我們使用者可能就看資料開始肯定不是全部值需要部分就可以,看完這些在看後面的,這樣資料會讓覺得顯示沒有延遲