zoukankan      html  css  js  c++  java
  • C#中的yield return

    4.1 迭代器块 
    一个迭代器块(iterator block)是一个能够产生有序的值序列的块。迭代器块和普通语句块的区别就是其中出现的一个或多个yield语句。 
    
    yield return语句产生迭代的下一个值。 
    yield break语句表示迭代完成。 
    只要相应的函数成员的返回值类型是一个枚举器接口或是一个可枚举接口,一个迭代器块就可以用作方法体、运算符体或访问器体。 
    
    迭代器块并不是C#语法中的独立元素。它们受多种因素的制约,并且对函数成员声明的语义有很大影响,但在语法上它们只是块(block)。 
    
    当一个函数成员用一个迭代器块来实现时,如果函数成员的形式参数列表指定了ref或out参数,则会引起编译错误。 
    
    如果在迭代器块中出现了return语句,则会因此编译错误(但yield return语句是允许的)。 
    
    如果迭代器块包含不安全上下文,则会引起编译错误。一个迭代器块必须定义在一个安全的上下文中,即使它的声明嵌套在一个不安全上下文中。 
    
    在下面的示例中,迭代器块(这里是方法 Power(int number, int power))中使用了 yield 语句。
    当调用 Power 方法时,它返回一个包含数字幂的可枚举对象。注意 Power 方法的返回类型是 IEnumerable(一种迭代器接口类型)。
    using System;
    using System.Collections;
    public class List
    {
        public static IEnumerable Power(int number, int exponent)
        {
            int counter = 0;
            int result = 1;
            while (counter++ < exponent)
            {
                result = result * number;
                yield return result;
            }
        }
    
        static void Main()
        {
            // Display powers of 2 up to the exponent 8:
            foreach (int i in Power(2, 8))
            {
                Console.Write("{0} ", i);
            }
        }
    }
     
    2 4 8 16 32 64 128 256 
    
  • 相关阅读:
    docker生产——容器通信
    .net core集成JWT(基础)
    JWT基本概念
    MySQL数据更新
    MySQL查询练习2
    C语言程序设计之字符串处理
    MySQL查询练习
    博客文章搬迁
    C语言程序设计之 数组2020-10-28
    Java方法重载浅谈
  • 原文地址:https://www.cnblogs.com/nafio/p/9137572.html
Copyright © 2011-2022 走看看