C#中的yield关键字

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都是迭代器中的一个元素。

转自:http://www.luacloud.com/2011/csharp-yield-return.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值