您的位置:首页 > 其它

构建可枚举类型(IEnumerable和IEnumerator接口)

2016-03-08 23:19 387 查看
1.IEnumberable接口

public interface IEnumberable

    {

        IEnumerator GetEnumerator();  //返回对另一个接口的引用IEnumerator

    }

2.IEnumerator接口

public interface IEnumerator

    {

        bool MoveNext();        //将光标的内部位置向前移动

        object Current { get; } //获取当前的项

        void Reset();           //将光标重置到第一个成员前面

    }

3.实现可枚举类型

public class MyClass1

    {

        public string Name { get; set; }

        public string Id { get; set; }

    }

    public class MyClass2:IEnumerable

    {

        private MyClass1[] carArray = new MyClass1[4];

        public MyClass2()

        {

            carArray[0] = new MyClass1 { Name = "Test1", Id = "1" };

            carArray[1] = new MyClass1 { Name = "Test2", Id = "2" };

            carArray[2] = new MyClass1 { Name = "Test3", Id = "3" };           

        }

        public IEnumerator GetEnumerator()

        {

            return new MyClass3(carArray);

        }

    }

    public class MyClass3:IEnumerator

    {

        private MyClass1[] myCls1 = null;

        private int count = 0;

        public MyClass3(MyClass1[] myCls1)

        {

            this.myCls1 = myCls1;

        }

        public object Current

        {

            get { return myCls1[count]; }

        }

        public bool MoveNext()

        {

            count = count+1;

            if (count >= myCls1.Length)

            {

                return false;

            }

            else

            {

                return true;

            }

           

        }

        public void Reset()

        {

            count = 0;

        }

    }

    public class MyClass4

    {

        private void Func1()

        {

            MyClass2 cls2 = new MyClass2();

            foreach (MyClass1 item in cls2)

            {

                item.Name = "1";

                item.Id = "20";

            }

        }

    }

4.使用yield关键字构建迭代器方法

 public class MyClass2 : IEnumerable

    {

        private MyClass1[] carArray = new MyClass1[4];

        public MyClass2()

        {

            carArray[0] = new MyClass1 { Name = "Test1", Id = "1" };

            carArray[1] = new MyClass1 { Name = "Test2", Id = "2" };

            carArray[2] = new MyClass1 { Name = "Test3", Id = "3" };

        }

        public IEnumerator GetEnumerator()

        {

            //return new MyClass3(carArray);

            foreach (MyClass1 cls1 in carArray)

            {

                yield return cls1;

            }

        }

    }

编译器帮我们生成了相关的类

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: