码迷,mamicode.com
首页 > 其他好文 > 详细

yield关键字

时间:2019-04-12 23:29:33      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:write   returns   保留   ring   add   enum   bre   expr   ble   

1.yield语句有两种形式

(1)yield return <expression>;一次返回一个元素

         运行yield return 语句时,会返回一个 值,并记录当前位置及保留该值。下次调用迭代器函数时,将从该位置重新开始执行

(2)yield break;终止迭代

2.迭代器声明

(1) 返回类型必须为 IEnumerable、IEnumerable<T>、IEnumerator 或 IEnumerator<T>,或者IEnumerable、IEnumerator 的继承类

(2)声明不能有任何 in、ref 或 out 参数

3.yield关键字使用缺点

(1)匿名方法不能包含 yield return 或 yield break 语句

(2)被unsafe(不安全)修饰的方法不能使用yield关键字

4.异常处理

(1)yield  return语句不能置于try-catch块,既不能放在try块也不能放在catch块

(2)yield return 语句可以置于try-finally语句try块,能放在try块但不能放在finally块

(3)yield break语句可以置于try块和catch块,不能置于finally块

(4)如果 foreach 主体(在迭代器方法之外)引发异常,则将执行迭代器方法中的 finally 块

5.打印集合中的元素

(1)直接打印集合中的元素

static void Main(string[] args)
{
    foreach (var item in GetMultiplyNoYield(2,8))
    {
        Console.WriteLine("{0}", item);
    }
    Console.ReadKey();
}

/// <summary>
/// 不使用yield
/// </summary>
/// <param name="number"></param>
/// <param name="exponent"></param>
/// <returns></returns>
public static IEnumerable<int> GetMultiplyNoYield(int number,int exponent)
{
    List<int> list = new List<int>();
    int result = 1;
    for (int i = 0; i < exponent; i++)
    {
        result = result * number;
        list.Add(result);
    }
    return list;
}

 

(2)使用yield简化版

static void Main(string[] args)
{
    foreach (var item in GetMultiplyHasYield(2, 8))
    {
        Console.WriteLine("{0}", item);
    }
    Console.ReadKey();
}

/// <summary>
/// 使用yield
/// </summary>
/// <param name="number"></param>
/// <param name="exponent"></param>
/// <returns></returns>
private static IEnumerable<int> GetMultiplyHasYield(int number,int exponent)
{
    int result = 1;

    for (int i = 0; i < exponent; i++)
    {
        result = result * number;
        yield return result;
    }
}

 

yield关键字

标签:write   returns   保留   ring   add   enum   bre   expr   ble   

原文地址:https://www.cnblogs.com/qidakang/p/10699170.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!