yield return简单示例

     List<int> list = new List<int>()
        {
            1,2,3,4
        };
        // 需求:返回所有大于n的数

        // 方法1(不使用yield return)
        IEnumerable<int> WithoutYield(List<int> list, int n)
        {
            List<int> result = new List<int>();
            foreach (int i in list)
            {
                if (i > n)
                {
                    result.Add(i);
                }
            }
            return result;
        }

        // 方法2(使用yield return)
        IEnumerable<int> UseYieldReturn(List<int> list, int n)
        {
            foreach (int i in list)
            {
                if (i > n)
                {
                    yield return i;
                }
            }
        }
       // 调用
        void Call()
        {
            foreach (int i in WithoutYield(list, 2))
            {
                Console.WriteLine(i + "without yield");
            }

            foreach (int i in UseYieldReturn(list, 2))
            {
                Console.WriteLine(i + "with yield");
            }
        }

区别:方法1是先将所有大于n的数加载到内存中

     方法2是每调用一次返回一个值,是按需供给

结论:想得到一个IEnumerable<T>类型的集合,但是又不想一次性将数据加载到内存中,则可以使用yield return 实现按需供给

通俗理解:yield return以后,下次再调用这个方法,则从上次 yield return的地方继续执行(上次yield return之前的代码 在这次调用中不执行了~~)。

使用yield break,可以退出迭代。

				
时间: 2024-07-31 14:35:17

yield return简单示例的相关文章

C#中yield return的用法示例

using System; using System.Collections.Generic; namespace YieldReturn { class Program { static void Main(string[] args) { var list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; var resultNormal = EvenNormal(list); foreach (var item in resultNormal)

【Apache Kafka】Kafka安装及简单示例

(一)Apache Kafka安装 1.安装环境与前提条件 ??安装环境:Ubuntu16.04 ??前提条件: ubuntu系统下安装好jdk 1.8以上版本,正确配置环境变量 ubuntu系统下安装好scala 2.11版本 安装ZooKeeper(注:kafka自带一个Zookeeper服务,如果不单独安装,也可以使用自带的ZK) 2.安装步骤 ??Apache基金会开源的这些软件基本上安装都比较方便,只需要下载.解压.配置环境变量三步即可完成,kafka也一样,官网选择对应版本下载后直接

C# yield return用法

本文实例讲述了C#中yield return用法,并且对比了使用yield return与不使用yield return的情况,以便读者更好的进行理解.具体如下: yield关键字用于遍历循环中,yield return用于返回IEnumerable<T>,yield break用于终止循环遍历. 有这样的一个int类型的集合: ? 1 2 3 4 static List<int> GetInitialData() {   return new List<int>(){

HMM的维特比算法简单示例

今天读了一位大牛的关于HMM的技术博客,读完之后,写了一个关于维特比算法的简单示例,用scala和java语言混合编写的.现在上传之. package com.txq.hmm import java.utilimport scala.collection._ /** * HMM维特比算法,根据显示状态链条估计隐式链条 * @param states 隐式states * @param observations 显式states * @param start_probability 初始概率向量

C#基础复习IEnumerable(和 yield return的使用滴呀 )

IEnumerable 真是基础中的基础,然而..... 我们直接来看看这个接口的实现吧: 它是一个公开枚举数,该枚举数支持在非泛型集合上进行简单的迭代.换句话说,对于所有数组的遍历,都来自IEnumerable,那么我们就可以利用这个特性,来定义一个能够遍历xxxxxx的通用方法 先看我们的经典实例1: using System; using System.Collections; using System.Collections.Generic; using System.Linq; usi

C# yield return 用法与解析

C# yield return 用法与解析 本文参考自:http://www.jb51.net/article/54810.htm 当初没有认真理解 yield 这个关键字,现在又遇到了依旧不理解,为了以后不再为了 yield 困惑,决定好好研究一下 yield 的用法与意义: yield 从字面上理解有“退位,屈服”的意思,转一下弯就理解成“权限转移”,也就是将控制权交给别人,在这里就是把集合里满足条件(如果没有过滤条件,就是全体)的个体的操作转移给另一个对象. class Program {

【转】bind简单示例

bind简单示例代码 namespace { class placeholder_ {}; placeholder_ __1; } template <typename R, typename T, typename Arg> class simple_bind_t { private: typedef R (T::*F)(Arg); F f_; T* t_; Arg& a_; public: simple_bind_t(F f, T* t, Arg &a) : f_(f),

C#中的yield return与Unity中的Coroutine(协程)

C#中的yield return C#语法中有个特别的关键字yield, 它是干什么用的呢? 来看看专业的解释: yield 是在迭代器块中用于向枚举数对象提供值或发出迭代结束信号.它的形式为下列之一:yield return <expression>;yield break 看如下例子: 1 public class CustomCollection :IEnumerable { 2 3 public static void Main (string[] args) 4 { 5 Custom

C#中,什么时候用yield return

yield关键字用于遍历循环中,yield return用于返回IEnumerable<T>,yield break用于终止循环遍历. 有这样的一个int类型的集合: static List<int> GetInitialData() { return new List<int>(){1,2,3,4}; } 需要打印出所有值大于2的元素. 不使用yield return的实现 static IEnumerable<int> FilterWithoutYiel