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更底層的操作。
參考資料: