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

  • 相关阅读:
    【crontab】误删crontab及其恢复
    New Concept English there (7)
    New Concept English there (6)
    New Concept English there (5)
    New Concept English there (4)
    New Concept English there (3)
    New Concept English there (2)Typing speed exercise
    New Concept English there (1)Typing speed exercise
    New Concept English Two 34 game over
    New Concept English Two 33 94
  • 原文地址:https://www.cnblogs.com/LuckyZLi/p/12973449.html
Copyright © 2011-2022 走看看