C#中IEnumerable的學習


C#中IEnumerable的學習

簡介:

IEnumerable接口是非常的簡單,只包含一個抽象的方法GetEnumerator(),它返回一個可用於循環訪問集合的IEnumerator對象。對於所有數組的遍歷,都來自IEnumerable接口。
IEnumerator對象有什么呢?它是一個真正的集合訪問器,沒有它,就不能使用foreach語句遍歷集合或數組,因為只有IEnumerator對象才能訪問集合中的項,假如連集合中的項都訪問不了,那么進行集合的循環遍歷是不可能的事情了。

一、foreachIEnumerable中案例

 public static void Test3()
        {
            MyInt temp = new MyInt();
            foreach (int item in temp)
                Console.WriteLine(item);
        }
        //foreach的必須要實現IEnumerable和IEnumerator的接口
        public class MyInt : IEnumerable
        {
            int[] temp = { 1, 32, 43, 343 };

            public IEnumerator GetEnumerator()
            {
                return temp.GetEnumerator();
            }
        }

相當於下面代碼:

   public static void Test1()
        {
            int[] myArray = { 1, 32, 43, 343 };
            //獲取要遍歷的枚舉數
            IEnumerator myie = myArray.GetEnumerator();
            //重置當前項,相當於把指針移到初始位置:position = -1; 一開始認識數組的索引從“0”開始
            myie.Reset();
            //向前移動一個索引,返回Bool類型,判斷是否超出下標
            while (myie.MoveNext())
            {
                int i = (int)myie.Current;//從Object轉成對應類型
                Console.WriteLine("Value: {0}", i);
            }
        }

包含一個屬性兩個方法
MoveNext:把當前的項移動到下一項(類似於索引值),返回一個bool值,這個bool值用來檢查當前項是否超出了枚舉數的范圍!
Current:獲取當前項的值,返回一個object的類型!
Reset:顧名思義也就是把一些值恢復為默認值,比如把當前項恢復到默認狀態值!

二、Lamda在IEnumerable中案例

 //lamda表達式在數組中查詢
        public static void Test2()
        {
            List<string> fruits =
              new List<string> { "apple", "passionfruit", "banana", "mango",
                    "orange", "blueberry", "grape", "strawberry" };
            //List<string> query = fruits.Where(fruit => fruit.Length < 6).ToList();
            IEnumerable<string> query = fruits.Where(fruit => fruit.Length < 6);
            foreach (string fruit in query)
                Console.WriteLine(fruit);

        }

只篩選出List中的元素長度小於6的值,然后打印出。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM