Enumerable與Enumerator

 

一、IEnumerable與IEnumerable<T>

1.IEnumerable所定義的方法成員為LINQ資料查詢技術的基礎。

2.IEnumerable<T>是IEnumerable介面的泛型版本,它繼承了IEnumerable介面

public interface IEnumerable<T> : IEnumerable

3.LINQ技術範例程式碼


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LinqFirst
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> weekList = new List<string> { "Mon", "tue", "web", "thr", "fri", "sat", "sun" };
            //挑出List裡面第一字為t的元素
            //由於List<T>有實作IEnumerable<T>所以才能使用LINQ技術的Where方法
            IEnumerable<string> enumWeek = weekList.Where(weekDay => weekDay.StartsWith("t"));//使用Lambda運算式
            foreach (string item in enumWeek)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();

            //另一種寫法
            IEnumerable<string> enumWeek2 = from t in weekList where t.StartsWith("t") select t;//使用LINQ查詢運算式
            foreach (string item in enumWeek2)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();
        }
    }
}

4.Enumerable的擴充方法有select、where、order by、group by等等,

class Enumerable將提供這些擴充方法給IEnumerable使用。

 

二、IEnumerator

1.IEnumerable底下所定義一個GetEnumerator()方法,用來取得IEnumerator實體物件

2.IEnumerator提供的方法有MoveNext、Rest、Current...等等。

3.範例程式碼


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LinqFirst
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> weekList = new List<string> { "Mon", "tue", "web", "thr", "fri", "sat", "sun" };

            //IEnumerator
            IEnumerator<string> enumWeek3 = weekList.GetEnumerator();
            string outputstring = "";
            while (enumWeek3.MoveNext())
            {
                string s = enumWeek3.Current.ToString();
                if (s.StartsWith("t"))
                {
                    outputstring += s +"\n";
                }
            }
            Console.WriteLine(outputstring);
            Console.ReadLine();
        }
    }
}

總結來說,IEnumerator為IEnumerable更底層的操作。

 

參考資料:

Enumerable 類別