IDictionary 元素巡覽-IDictionaryEnumerator 介面

IDictionary 介面定義的方法 GetEnumerator ,表示用來取得一個 IDictionaryEnumerator 介面型別物件,由於 IDictionaryEnumerator 繼承 IEnumerator 介面,因此除了透過鍵存取元素,此種介面的實作類別同樣支援 forcach 語法,或是你也可以選擇引用 MoveNext 方法,巡覽集合中的物件元素。

IDictionaryEnumerator 定義了三個非常重要的屬性,分別是 Entry 、 Key 以及 Value ,Key以及Value均是唯讀屬性,用來取得集合中的鍵與數值, Entry 屬性則是用以取得字典的「鍵/值」配對,並且以 DictionaryEntry 結構的形式回傳,其定義如下:
DictionaryEntry Entry {get;}
Entry 是唯讀屬性,因此你能夠讀取其「鍵/值」配對,但無法更改內容。

就如同 IEnumerator 介面與 IEnumerable 介面的關係, IDictionaryEnumerator 介面的實作物件,必須透過實作 IDctionary 介面的類別物件來取得,如下圖:



接下來利用實作範例,說明方法 GetEnumerator 的引用,並且利用 MoveNext 取得集合中的所有元素。
class Program
{
    static void Main(string[] args)
    {
        Hashtable hashtable = new Hashtable();
        for (int i = 1; i < 8; i++)
        {
            string objectKey = "key " + (i * 10);
            string objectValue = "Value " + (i * 10);
            hashtable.Add(objectKey, objectValue);
        }
        Console.WriteLine("列舉 key/value :\n");
        IDictionaryEnumerator ide = hashtable.GetEnumerator();
        while (ide.MoveNext())
        {
            Console.WriteLine("{0}:{1}", ide.Key, ide.Value);
        }
        Console.ReadKey();
    }
}
建立一個 Hashtable 物件 hashtable ,利用 for廻圈依序加入數個物件元素,並根據計數的變數 i 指定物件的 key 與 value 值。 引用方法 GetEnumerator 取得hashtable 的 IDictionaryEnumerator 型別列舉器,取得其參考變數為 ide ,最後利用 while 迴圈,逐一引用 MoveNext 的方法取出集合中的物件元素。
列舉 key/value :

key 10:Value 10
key 30:Value 30
key 20:Value 20
key 50:Value 50
key 40:Value 40
key 70:Value 70
key 60:Value 60



沒有留言: