C# 迭代器实现枚举器

本文详细介绍了如何使用C#迭代器来简化手动实现枚举器的过程,减轻程序员的工作负担。通过实现Ienumerable接口并利用yield关键字,能够更高效地枚举自定义类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上一篇日志中说的手动实现枚举器来枚举自定义的类型,

http://blog.youkuaiyun.com/weixingstudio/article/details/6817319

可以看到过程非常复杂,而且容易出错。为了减轻程序员的负担,C#还提供了迭代器来帮助程序员完成其中的大部分工作。

 

迭代器(iterator)是能生成已排序值序列的一个代码块。迭代器实质上并不是一个可枚举的类的成员,迭代器只是指定了一个序列,枚举器应该用这个序列来返回其中的值。也就是说,迭代器只是对枚举序列的一个描述,C#编译器可以利用它来创建自己的枚举器。

 

下面看代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Iterator
{
    class Program
    {
        static void Main(string[] args)
        {
            MyCollection<string> collect = new MyCollection<string>();
            collect.FillList("china","american","australia","germany","japan","korea","canada");
            foreach (string t in collect)
            {
                Console.WriteLine(t);
            }
        }
    }

    class MyCollection<T> : IEnumerable<T>
    {
        private List<T> myList=new List<T>();

        public void FillList(params T[] items)
        {
            foreach(T t in items)
            {
                myList.Add(t);
            }
        }

        IEnumerator<T> IEnumerable<T>.GetEnumerator()
        {
            foreach (var t in myList)
            {
                yield return t;
            }
        }

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            //throw new NotImplementedException();
            return null;
        }
    }
}


MyCollection 这个类实现了Ienumerable<T>接口,并且是显示的实现。在GetEnumerator() 方法中,通过yield 关键字返回要获取的数据。

 

yield 说明:yield 关键字制订了每一次迭代要反悔的值,它临时将方法叫停,将一个值传给调用者。当调用者需要下一个值时,GetEnumerator() 方法就从上次暂停的地方继续,生成下一个值。最终所有的数据都被访问,GetEnumerator()方法将终止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值