c#创建自定义集合类并使之支持使用foreach迭代

各种集合都可以是foreach来实现迭代访问,下面我们自定义集合类来实现foreach迭代访问
using System;
using System.Collections.Generic;
class myclass<T>:IEnumerable<T>   //为了使类能被迭代需要继承IEnumeable这个接口
{
    private List<T> mylist=new List<T>();  //在类中定义集合
    public myclass()
    { 
    }
    public void Insert(T data)    //用于插入数据
    {
        mylist.Add(data);
    }
    public IEnumerator<T> GetEnumerator()   //实现接口中的方法
    {
        foreach (T item in mylist)
            yield return item;   //这里使用yield可以非常简化我们工作量不用我们自己去写一个继承IEnumerator
                                 //的类,这样编译器帮我做了很多事情
    }
    //接口中的方法
    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        throw new NotImplementedException();
    }
}

class Test
{
    public static void Main()
    {
        myclass<string> my = new myclass<string>();
        my.Insert("ni");
        my.Insert("hao");
        my.Insert("ma");
        foreach (string item in my)   //使用foreach对集合类进行迭代
            Console.WriteLine(item);
    }
}
说明:
各种集合类之所以能使用foreach就是因为集合的继承了IEnumeable这个接口,而这个接口中最重要的是GetEnumerator()这个函数,它返回的是一个IEnumerator这个接口类型,这个接口为foreach提供了访问条件,如果我们在实现这个GetEnumerator函数时不使用yield关键字我们就需要手动去实现一个继承自IEnumerator接口的类,在这个内中我们需要实现MoveNext方法,getcurrent属性等相关代码,然后我们在GetEnumerator调用时再将我们的集合类作为参数放到继承IEnumerator接口的类构造中,这样就会非常麻烦,所以我们使用yield关键字来进行迭代,简化了我们的工作。
所以编写一个迭代类步骤如下:
1.继承接口IEnumerable<T>或IEnumerable(具体看是否写成泛型)   
2.实现接口的两个函数,重点实现GetEnumerator()函数使用yield return返回我们的集合元素
3.外部直接对这个集合类使用foreach迭代使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值