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 
yield returnC#中的一个关键字,用于在迭代器方法中返回一个元素,并暂停迭代器的执行,直到下一次迭代。通过使用yield return,可以在不立即计算所有元素的情况下,逐个返回元素。 引用\[1\]中展示了一个使用yield return实现的过滤器方法。该方法通过遍历初始数据集合,并返回大于2的元素。每次调用迭代器方法时,只返回一个元素,并在下一次迭代时继续执行。 引用\[2\]展示了一个不使用yield return的实现。该方法通过创建一个结果列表,并在遍历初始数据集合时,将大于2的元素添加到列表中。最后,返回结果列表。 引用\[3\]展示了一个正确使用yield return的示例。该示例使用yield return返回一个包含指定数量的Customer对象的迭代器。在使用foreach循环遍历迭代器时,只打印ID小于1000的Customer对象,并在遇到ID大于等于1000的对象时终止循环。 总结来说,yield returnC#中用于在迭代器方法中逐个返回元素的关键字。它可以帮助我们在不立即计算所有元素的情况下,按需返回元素,并暂停迭代器的执行。 #### 引用[.reference_title] - *1* *2* [C#yield return用法分析](https://blog.youkuaiyun.com/wojiuguowei/article/details/124604083)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [C# yield return详解。](https://blog.youkuaiyun.com/csdn2990/article/details/129664309)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值