經過IEnumerable接口遍歷數據

使用IEnumerable接口遍歷數據,這在項目中會常常的用到,這個類型呢主要是一個枚舉器。數組

1.首先須要讓該類型實現一個名字叫IEnumerable的接口,實現該接口的主要目的是爲了讓當前類型中增長一個名字叫GetEnumerator()的方法。this

public class Person : IEnumerable
    {
        private string[] Friends = new string[] { "張三", "李四", "王五", "趙六" };

        public string Name
        {
            get;
            set;
        }
        public int Age
        {
            get;
            set;
        }
        public string Email
        {
            get;
            set;
        }

        #region IEnumerable 成員

        //這個方法的做用就是返回一個「枚舉器」
        public IEnumerator GetEnumerator()
        {
            return new PersonEnumerator(this.Friends);
        }

        #endregion
    }

2.但願一個類型被枚舉遍歷,就是要實現一個枚舉器方法spa

public class PersonEnumerator : IEnumerator
    {
        public PersonEnumerator(string[] fs)
        {
            _friends = fs;
        }
        private string[] _friends;

        //通常下標都是一開始指向了第一條的前一條。第一條是0
        private int index = -1;


        #region IEnumerator 成員

        public object Current
        {
            get
            {
                if (index >= 0 && index < _friends.Length)  //下標有範圍
                {
                    return _friends[index];
                }
                else
                {
                    throw new IndexOutOfRangeException();
                }
            }
        }
       
        public bool MoveNext()
        {
            if (index + 1 < _friends.Length)     //下標有範圍
            {
                index++;
                return true;
            }
            return false;
        }

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

        #endregion
    }

3.而後進行遍歷,這裏呢能夠調用本身封裝的MoveNext方法去找數組元素code

 Person p = new Person();

            IEnumerator etor = p.GetEnumerator();
            while (etor.MoveNext())
            {
                Console.WriteLine(etor.Current.ToString());
            }

也能夠直接使用foreach,並且主要是由於是枚舉元素,相似與數組,list等等之類的,均可以使用Lambda表達式來進行數據的處理blog

 Person p = new Person();
            foreach (string item in p)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine("ok");

4.輸出的結果以下:接口

相關文章
相關標籤/搜索