首页 > Windows开发 > 详细

C# Yield的使用

时间:2020-05-27 16:29:52      阅读:48      评论:0      收藏:0      [点我收藏+]

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

C# Yield的使用

原文:https://www.cnblogs.com/LuckyZLi/p/12973449.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!