這個嵌套類的代碼對照圖3很 容易看懂,每個方法的功能在MSDN中也有詳細的介紹,這裡不再對它進行講解。 接下來要給外部類實現IEnumerable<KeyValuePair<TKey, TValue>>和 IEnumerable接口。更改類聲明代碼如下:
public class ReversibleSortedList<TKey, TValue> :
IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable
當然,這兩個接口分別只有一個成員:GetEnumerator()方 法,剛才所創建的嵌套類就是為這個方法所創建的。接下來在 ReversibleSortedList類中使用顯式接口成員實現來實現這兩個接口:
IEnumerator<KeyValuePair<TKey, TValue>>
IEnumerable<KeyValuePair<TKey, TValue>>.GetEnumerator()
{
return new Enumerator<TKey, TValue>(this);
}
IEnumerator IEnumerable.GetEnumerator()
{
return new Enumerator<TKey, TValue>(this);
}
好,現在 更改Main()方法中的代碼看看是否可以使用foreach循環來訪問 ReversibleSortedList中的元素,當然,前面所寫的Print()成員方法可以退休 了。
static void Main()
{
ReversibleSortedList<int, string> rs=new ReversibleSortedList<int, string>();
rs.Add (3,"a");
rs.Add(1,"b");
rs.Add(2,"c");
rs.Add(6,"d");
rs.Add(5,"e");
rs.Add (4,"f");
foreach (KeyValuePair<int, string> d in rs)
{
Console.WriteLine (d.Key + " " + d.Value);
}
}
由於代碼已經達到300行,貼到博客上會導致運行緩慢,後面所 有的可運行代碼將以文件的形式給出,大家可以直接下載運行。
ReversibleSortedList 0.4版本:實現迭代
運行結果:
1 b
2 c
3 a
4 f
5 e
6 d
真棒,現在已經取得了階段性的成果。但還有一些遺憾 ,雖然在Enumerator類中實現了IDictionaryEnumerator接口,但還不能在 foreach中使用DictionaryEntry訪問元素。這是因為IDictionary接口重載了 GetEnumerator()接口,而它返回的是一個IDictionaryEnumerator接口,也就是 說,只有實現了IDictionary接口才能使用DictionaryEntry訪問其中元素。實現 IDictionary接口之前我們需要建立一些輔助的內部類,這將在下一節進行講解 。
本文配套源碼