C#和asp.net后端语言学习

C#中的yield关键字

2018-10-17  本文已影响22人  ShenYj

最近一段时间接手维护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。
上一篇下一篇

猜你喜欢

热点阅读