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个数据,我们需要得到里面的耦合,当我们通过这个方法得到一个耦合会立马显示在控制台上。而不是等很久也就把全部偶数都查找到存入集合当中,然后在一一遍历输出。这个好处是很大的。比如我们用户可能就看数据开始肯定不是全部值需要部分就可以,看完这些在看后面的,这样数据会让觉得显示没有延迟

posted @ 2020-05-27 15:35  LuckyZLi  阅读(310)  评论(0编辑  收藏  举报