欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#中的yield关键字的使用方法介绍

程序员文章站 2023-12-18 13:49:58
yield不能单独放在try-catch块中,如果try中有yield那么,这个try块后面不许跟着finally块;也不能出现在匿名方法中,所以,看起来yield似乎并不...
yield不能单独放在try-catch块中,如果try中有yield那么,这个try块后面不许跟着finally块;也不能出现在匿名方法中,所以,看起来yield似乎并不常用,但是也不是不用。我前面有一个关于迭代器的例子《c#中的迭代器基础》中就用到了。可以参考一下那个例子,但是这里要再说的一点是我后来看到的,yield是跟return一起使用的,形式为yield return xxx,一般来说单独的return在每个方法中只能存在一个。而yield则不同的是,可以出现连续多个。
迭代器,是一个连续的集合,出现多个yield return其实就是将这多个的yield return元素按照出现的顺序存储在迭代器的集合中而已。形如下面的形式:
复制代码 代码如下:

 public class citycollection : ienumerable<string>
  {
      string[] _items = new string[] { "黑龙江", "吉林", "辽宁", "山东", "山西", "陕西", "河北", "河南", "湖南", "湖北", "四川", "广西", "云南", "其他" };
      ienumerator<string> ienumerable<string>.getenumerator()
      {
          for (int i = 0; i < _items.length; i++)
          {
              yield return _items[i];
              yield return string.format("index:{0}", i);
         }
     }
     ienumerator ienumerable.getenumerator()
     {
         for (int i = 0; i < _items.length; i++)
         {
             yield return _items[i];
         }
     }
 }

而返回的迭代结果就是这样的:
复制代码 代码如下:

  黑龙江
  index:0
  吉林
  index:1
  辽宁
  index:2
  山东
  index:3
  山西
 index:4
 陕西
 index:5
 河北
 index:6
 河南
 index:7
 湖南
 index:8
 湖北
 index:9
 四川
 index:10
 广西
 index:11
 云南
 index:12
 其他
 index:13

每一条yield return都是迭代器中的一个元素。

上一篇:

下一篇: