C# IEnumerator枚举器的具体使用

作者:霍比特X

本文主要介绍了C# IEnumerator枚举器的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1、对象只要一个类型实现了IEnumerable接口就能遍历
2、IEnumerator是枚举器,一个接口类,实现MoveNext->Current->Reset
3、yield关键字是一个迭代器,相当于实现了IEnumerator枚举器
4、IEnumerable是可枚举类型,IEnumerator是枚举器

public class IEnumerableShow {
        public void Show() {
            int[] array = { 1, 2, 3, 4, 5 };
            Student student = new Student { Id = 1 };
            foreach (var item in array) {
                Console.WriteLine();
    class Student:IEnumerable { 
        public int Id { get; set; }
        public IEnumerator GetEnumerator() { //返回一个枚举器
            //yield return "Ant编程1";
            //yield return "Ant编程2";
            //yield return "Ant编程3";
            string[] student = { "Ant编程1", "Ant编程2", "Ant编程3" };
            return new StudentEnumerator(student);
    internal class StudentEnumerator : IEnumerator
        string[] _student;
        int _position = -1;
        public StudentEnumerator(string[] student) {
            this._student = student;
        public object Current {
            get {
                if (_position == -1) {
                    throw new InvalidOperationException();
                if (_position>=_student.Length) {
                    throw new InvalidOperationException();
                return _student[_position];
        public bool MoveNext()
            if (_position<_student.Length-1) {
                _position++;
                return true;
            else {
                return false;
        public void Reset()
            _position = -1;

IEnumerator , IEnumerable 枚举器接口

IEnumerator是枚举器的意思,IEnumerable是可枚举的意思。这两个都是个接口

foreach是一种语法糖,用来简化对可枚举元素的遍历代码。而被遍历的类通过实现IEnumerable接口和一个相关的IEnumerator枚举器来实现遍历功能。

public class MyList : IEnumerable
    public int[] _data = new int[10] { 1, 5, 7, 9, 7, 8, 7, 8, 7, 4 };
    public int this[int index]
            return _data[index];
    IEnumerator IEnumerable.GetEnumerator()
        Debug.Log("foreach调用  GetEnumerator");
        return new MIEnumtor(this);
public class MIEnumtor : IEnumerator
    private MyList myList;
    private int index;
   public  MIEnumtor(MyList my)
        index = -1;
        myList = my;
    public object Current
            Debug.Log("foreach调用  Current");
            return myList[index];
    public bool MoveNext()
        Debug.Log("foreach调用  MoveNext");
        if (index < myList._data.Length - 1)
            index++;
            return true;
        index = -1;
        return false;
    public void Reset()

GetIEnumerator()负责获取枚举器。
MoveNext()负责让Current获取下一个值,并判断遍历是否结束。
Current负责返回当前指向的值。
Rest()负责重置枚举器的状态(在foreach中没有用到)
这些就是IEnumerable,IEnumerator的基本工作原理了。

        MyList my = new MyList();
        foreach (var item in my)
            Debug.Log(item);
        MyList my = new MyList();
        MIEnumtor mIEnumtor = my.GetEnumerator();
        while (mIEnumtor.MoveNext())
            Debug.Log(mIEnumtor.Current);

到此这篇关于C# IEnumerator枚举器的具体使用的文章就介绍到这了,更多相关C# IEnumerator枚举器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • C#使用对象序列化类库MessasgePack
    C#使用对象序列化类库MessasgePack
    2022-06-06
  • C#生成比较短的Token字符串
    C#生成比较短的Token字符串
    2022-06-06
  • C#线程委托BeginInvoke与EndInvoke的用法
    C#线程委托BeginInvoke与EndInvoke的用法
    2022-07-07
  • C#连接SQL Sever数据库与数据查询实例之数据仓库详解
    C#连接SQL Sever数据库与数据查询实例之数据仓库详解
    2022-06-06
  • C#中的枚举类型(Enum)介绍
    C#中的枚举类型(Enum)介绍
    2022-06-06
  • C#线程委托BeginInvoke与EndInvoke的用法
    C#线程委托BeginInvoke与EndInvoke的用法
    2022-06-06
  • C#使用async和await实现异步编程
    C#使用async和await实现异步编程
    2022-06-06
  • C#中DataSet、DataTable、DataRow数据的复制方法
    C#中DataSet、DataTable、DataRow数据的复制方法
    2022-06-06
  • 美国设下计谋,用娘炮文化重塑日本,已影响至中国
    美国设下计谋,用娘炮文化重塑日本,已影响至中国
    2021-11-19
  • 时空伴随者是什么意思?时空伴随者介绍
    时空伴随者是什么意思?时空伴随者介绍
    2021-11-09
  • 工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    2021-11-05
  • 2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2021-10-26
  • 电脑版 - 返回首页

    2006-2023 脚本之家 JB51.Net , All Rights Reserved.
    苏ICP备14036222号