C#中的yield关键字

最近一段时间接手维护C#项目, 从GitHub checkout一个项目,无意中看到这样一个关键字, 于是就好奇的搜了下,了解下使用场景

C# 中的"yield"使用
MSDN的官方api

一个方法返回一个IEnumerable 类型结果集(例如返回一个list<int>的结果),通常的代码是这样的

 1         /// <summary>
 2         /// 
 3         /// </summary>
 4         /// <returns></returns>
 5         public IEnumerable<int> Method()
 6         {
 7             List<int> results = new List<int>();
 8             int counter = 0;
 9             int result = 1;
10 
11             while (counter++ < 10)
12             {
13                 result = result * 2;
14                 results.Add(result);
15             }
16             return results;
17         }

通过 yield可以简化为:

 1         /// <summary>
 2         /// 
 3         /// </summary>
 4         /// <returns></returns>
 5         public IEnumerable<int> YieldDemo()
 6         {
 7             int counter = 0;
 8             int result = 1;
 9             while (counter++ < 10)
10             {
11                 result = result * 2;              
12                 yield return result;
13             }
14         }

两种写法的效果是一样的

关于这个关键字的其他一些注意点:

1 不能将 yield return 语句置于 try-catch 块中。 可将 yield return 语句置于 try-finally 语句的 try 块中。
2 可将 yield break 语句置于 try 块或 catch 块中,但不能将其置于 finally 块中。
3 如果 foreach 主体(在迭代器方法之外)引发异常,则将执行迭代器方法中的 finally 块。
4 匿名方法。 有关详细信息,请参阅匿名方法。
5 包含不安全的块的方法。 有关详细信息,请参阅unsafe。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,930评论 25 708
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,854评论 2 59
  • 人的潜力无限大的,只要你开始行动。 图书馆看书,学英语,学理财,运动,拉伸,走路抬头挺胸,培养自信感。 这些都已成...
    行动妞阅读 266评论 0 0
  • 离别,是谁也阻止不了的眼泪Interview | 梦辰、晓云 我们相逢在单纯的岁月,可最后,却在浮躁中离别,再一次...
    華水亦阅读 195评论 0 3
  • [嵌牛导读] “量子计算”和“人工智能”是未来最令人激动的话题,也是最前沿的科技领域,如果我们把量子计算机...
    王明骞阅读 715评论 0 1