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

原创 2016年08月28日 20:26:15
各种集合都可以是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迭代使用

WPF(Converter 练习[很详细])

LINQ To SQL 语法及实例大全

LINQ to SQL语句(1)之Where   Where操作   适用场景:实现过滤,查询等功能。   说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判...

c#之通过自定义集合彻底搞懂foreach这个语法糖

**我直接贴出代码,每个代码的作用我已经注释上,后面在单独分析下语法糖,一定要上机测试。 using System; using System.Collections; using System...

自定义标签的开发及使用自定义标签实现迭代foreach循环

在JSP2中,规范简化了标签库的开发,在JSP2中开发自定义标签只需如下三个步骤:    一、开发自定义标签处理类    二、建立一个*.tld文件    三、在JSP文件中使用自定义标签  ...

自定义标签的开发及使用自定义标签实现迭代foreach循环

在JSP中,规范简化了标签库的开发,在JSP2中开发自定义标签只需如下三个步骤: 一、开发自定义标签处理类 二、建立一个*.tld文件 三、在JSP文件中使用自定义标签 自定义标签类应该继承一...

黑马程序员_学习日记9_C#基础归纳之foreach迭代

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------   枚举:  在foreach中...

C#拾遗之foreach迭代语句

C#语言提供了一个for语句循环的捷径,而且还促进了集合类的更为一致,它就是foreach语句。         foreach语句的定义格式为:         foreach(类型   变量 ...

JSP自定义标签开发Foreach迭代标签

对于JSP中的容器,进行迭代的方法最好就是使用标签,当然,SUN提供了JSTL标签库,但是我打算自己开发这个标签。 首先得考虑对于单关键字容器和多关键字容器,分别对应Collection 和Map,...

javaweb之自定义标签库——简单的foreach标签(对List迭代)

开发迭代标签(foreach) ${str}

python:自定义类中迭代行为的实现

python迭代器-csdn博客Python 中 Iterator和Iterable的区别#!/usr/bin/env python # -*- coding: utf-8 -*- # @author...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c#创建自定义集合类并使之支持使用foreach迭代
举报原因:
原因补充:

(最多只允许输入30个字)