zoukankan      html  css  js  c++  java
  • C#关键字:yield

    yield是C#为了简化遍历操作实现的语法糖。在语句中使用 yield 关键字,表示在该关键字所在的方法、运算符或 get 访问器是迭代器。有两种形式:

    yield return <expression>;
    yield break;

    这个还是看个实例更清楚:

    static void Main(string[] args)
    {
        foreach (int i in Power(2, 8))
        {
            Console.Write("{0} ", i);
        }
        // Output: 2 4 8 16 32 64 128 256
    
        Console.ReadKey();
    }
    
    public static System.Collections.IEnumerable Power(int number, int exponent)
    {
        int result = 1;
        for (int i = 0; i < exponent; i++)
        {
            result = result * number;
            yield return result;
        }
    }

    此处,使用了 yield return 返回每一个元素节点。使用  foreach  语句或 LINQ 查询,则使用迭代器方法。 foreach 循环的每次迭代调用迭代器方法。 yield return 语句在迭代器方法时为止,expression 返回,并且,代码的当前位置保留。 当下次调用迭代器函数时执行从该位置重新启动。通过调试,我们可以看到代码的执行顺序大致如下:

    这个图中标记的顺序可能有点抽象,不知道大家能不能理解?~~~

    除此之外还有 yield break , 其表示结束迭代,跳出循环。不理解,看实例:

    static void Main(string[] args)
    {
        foreach (int i in Power(2, 8))
        {
            Console.Write("{0} ", i);
        }
        // Output: 2 4 8 16 
    
        Console.ReadKey();
    }
    
    public static System.Collections.IEnumerable Power(int number, int exponent)
    {
        int result = 1;
        for (int i = 0; i < exponent; i++)
        {
            result = result * number;
            if (i == 4)
                yield break;
            yield return result;
        }
    }

    参考文档

    1. https://msdn.microsoft.com/library/9k7k7cf0%28v=vs.110%29.aspx
    2. http://www.cnblogs.com/kingcat/archive/2012/07/11/2585943.html
    3. http://www.cnblogs.com/CareySon/archive/2009/12/16/1625469.html
  • 相关阅读:
    sqlilabs 5
    sqlilabs 1-4
    ipset
    kill命令的使用
    docker 札记
    批量删除数据库表中数据行
    正则表达式调试
    TimescaleDB安装学习
    记一次 Centos7 postgresql v11 安装时序数据库 TimescaleDB
    "知识库"
  • 原文地址:https://www.cnblogs.com/CCHUncle/p/5213966.html
Copyright © 2011-2022 走看看