最近一段时间接手维护C#项目, 从GitHub checkout一个项目,无意中看到这样一个关键字, 于是就好奇的搜了下,了解下使用场景
一个方法返回一个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。
网友评论