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

  • 相关阅读:
    AVCODEC_MAX_AUDIO_FRAME_SIZE 未定义标识符
    ffmpeg -使用总结
    ubuntu 编译安装ffmpeg
    转-查看Linux CPU个数,核心,线程数
    fpga是什么
    div自适应水平垂直居中的方法
    css百分比问题——`top`、`left`、'translate'的百分比参照谁?
    经典面试题:二分查找/折半查找
    JavaScript预解析
    React--组件
  • 原文地址:https://www.cnblogs.com/LuckyZLi/p/12973449.html
Copyright © 2011-2022 走看看