C# yield语句

yield关键字向编译器指示它所在的方法时迭代器块,在该块中yield关键字与return关键字结合使用向枚举器对象提供值,yield与break结合使用表示迭代结束。
以下为yield语句的两种形式:
yield return <expression>;
yield break;

使用一个 yield return 语句返回每个元素一个节点。

使用 foreach语句或 LINQ 查询,则使用迭代器方法。 foreach 循环的每次迭代调用迭代器方法。 当 yield return 语句在迭代器方法时为止,expression 返回,并且,代码的当前位置保留。 执行从该位置下次重新启动迭代器函数调用。

可以使用 yield break 语句结束迭代

如:
 
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(string[] args)
        {
            foreach (int i in Power(2, 8))
            {
                Console.WriteLine(i);
            }
            Console.ReadLine();
        }
输出结果为:
2
4
8
16
32
64
128
256

如上例子则是当调用Power方法时,它执行到yield return result语句,即停止在当前位置,返回一个包含数字幂的可枚举对象,注意该方法返回的是IEnumerable类型。

在使用 yield return 或 yield break 语句时,则表明它的方法、运算符或 get 访问器是迭代器。 迭代器方法、运算符或 get 访问器的声明必须满足以下要求:

  • 不允许不安全块
  • 返回类型必须是 IEnumerableIEnumerable<T>IEnumerator或 IEnumerator<T>
  • 方法、运算符或访问器不能有任何 ref 或 out 或参数
  • yield return 语句不能位于 try-catch 块。 yield return 语句可以位于在尝试 try-finally 块语句。
  • yield break 语句可以位于 try 块或 catch  块,而不是 finally 块。
  • 如果 foreach 主体 (在迭代器方法的外部) 引发异常,finally 在迭代器方法执行块。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值