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

  • 相关阅读:
    中译英26
    listen 59
    Speaking 1
    listen 58
    listen 57
    中译英25
    listen 56
    2018.2.27 RF module distance test part I
    中译英24
    第二章、PyQt5应用构建详细过程介绍
  • 原文地址:https://www.cnblogs.com/LuckyZLi/p/12973449.html
Copyright © 2011-2022 走看看