看看最後的測試,是不是不管具體的集合如何改變,遍歷代 碼都非常穩定?而且擴展新的集合類也非常方便,只是添加代碼不會修改原來的 代碼,符合開閉原則。當然,這麼好的解決方案微軟當然不會放過,現在C# 2.0 裡已經內置了對迭代器的支持,看看System.Collections, System.Collections.Generic命名空間,所有的集合都實現了這個接口: IEnumerable,這個接口還有泛型的版本。注意到這個接口只有一個方法: IEnumerator GetEnumerator();,IEnumerator就是迭代器的接口,相當於我的 實例裡面的Iterator,它也有泛型的版本。
那麼現在在.Net裡所有的集 合類都可以這樣訪問了:
IEnumerator IEnumerator = list.GetEnumerator();
while(IEnumerator.MoveNext())
{
object current = IEnumerator.Current;
}
但是這樣訪問也 太麻煩了,所以C#裡出現了foreach關鍵字,我們來看看foreach背後發生了什麼?假如有如下的代碼:
public static void Main()
{
ArrayList list = new ArrayList();
list.Add(1);
list.Add(2);
list.Add(3);
foreach (object item in list)
{
Console.WriteLine(item.ToString());
}
}