17 多数情况使用foreach进行循环遍历简单

foreach两个有点:语法更简单,默认调用Dispose方法;

缺点:不支持循环是对集合进行增删操作。

        static void Main(string[] args)
        {
            IMyEnumerable list = new MyList();
            IMyEnumerator enumerator = list.GetEnumerator();
        }
        interface IMyEnumerator
        {
            bool MoveNext();
            object Current { get; }
        }
        interface IMyEnumerable
        {
            IMyEnumerator GetEnumerator();
            int Count { get; }
        }
        class MyList : IMyEnumerable
        {
            object[] items = new object[10];
            IMyEnumerator myEnumerator;

            public object this[int i]
            {
                get { return items[i]; }
                set { this.items[i] = value; }
            }

            public int Count
            {
                get { return items.Length; }
            }

            public IMyEnumerator GetEnumerator()
            {
                if (myEnumerator == null)
                {
                    myEnumerator = new MyEnumerator(this);
                }
                return myEnumerator;
            }
        }

        class MyEnumerator : IMyEnumerator
        {
            int index = 0;
            MyList myList;
            public MyEnumerator(MyList myList)
            {
                this.myList = myList;
            }
            public bool MoveNext()
            {
                if (index + 1 > myList.Count)
                {
                    index = 1;
                    return false;
                }
                else
                {
                    index++;
                    return true;
                }
            }
            public object Current
            {
                get { return myList[index - 1]; }
            }
        }

 

posted @ 2016-01-14 13:50  小-黑  阅读(126)  评论(0)    收藏  举报