foreach内部原理

实现了IEnumerator接口和GetEnumerator()方法的类都可以进行foreach排序。

1,建一个Myclass类,实现IEnumerable接口,在该接口中有个GetEnumerator()方法,返回值类型为IEnumerato,在建一个辅佐类实现了IEnumerato接口



using System;

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


namespace _05_foreach
{
    class Myclass :IEnumerable
    {
        /// <summary>
        /// 枚举器
        /// </summary>
        public class MyClassEnum : IEnumerator
        {
            public Student[] students;
            public MyClassEnum(Student[] students)
            {
                this.students = students;
            }
            private int position = -1;
            public object Current
            {
                get { return students[position]; }
            }


            public bool MoveNext()
            {
                position++;
                return position < students.Length;
            }


            public void Reset()
            {
                position = -1;
            }
        }


        private Student[] _students;
        public Myclass(Student[] stu)
        {
            this._students = stu;
        }
        public IEnumerator GetEnumerator()
        {
            return new MyClassEnum(_students);
        }
    }

}


--------------学生类---------------

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


namespace _05_foreach
{
    class Student
    {
        public Student(string name)
        {
            this.name = name;
        }
        private string name;


        public string Name
        {
            get { return name; }
            set { name = value; }
        }
    }
}



------------------------调用myclass类对student[] 进行排序

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


namespace _05_foreach
{
    class Program
    {
        static void Main(string[] args)
        {
            Student stu1 = new Student("张三");
            Student stu2 = new Student("李四");
            Student stu3 = new Student("王五");
            Myclass my = new Myclass(new Student[] { stu1, stu2, stu3 });
            foreach (Student item in my)
            {
                Console.WriteLine(item.Name);
            }
            Console.Read();
        }
    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值