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

来源:互联网 发布:arma预测模型 软件 编辑:程序博客网 时间:2024/05/18 00:34

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;
            }
        }
    }

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




0 0
原创粉丝点击