2012-01-19 61 views
4

我有一個類使用字典來存儲一些數據。如何爲字典創建一個迭代器?

但我想從外面隱藏實現細節,遍歷所有我的數據,我想一個迭代器發送到我的課的ouside

我該怎麼辦呢?

+0

將所有值(引用)複製到一個簡單的(鍵入的)列表中並返回該列表? – CodingBarfield

+0

你想要你的迭代器返回什麼?外部代碼將迭代什麼? –

回答

4
public IEnumerable<KeyValuePair<int, string>> Foo() 
{ 
    var implementationDetail = new Dictionary<int, string> 
    { 
     { 1, "foo" }, 
     { 2, "bar" }, 
    }; 

    return implementationDetail; 
} 
+1

如果你想隱藏你正在使用字典的事實,你還可以返回'implementationDetail.Cast >()',這也會阻止像'((Dictionary )obj.Foo()) .Add(...)';) – Nuffin

2

您可以致電Dictinary.GetEnumerator()返回一個枚舉器。

1

您可以返回_dict.getEnumerator()但它會產生KeyValuePair項目。您不妨返回IDictionary

所以你可能想要_dict.Keys.getEnumerator(),和/或值相同。

但返回一個枚舉是奇數,更好的恢復:_dict.Keys as IEnumerable<KeyType>

1

遍歷詞典中,你可以使用:

Dictionary.GetEnumerator返回KeyValuePairs。

Dictionary.Keys返回一個KeyCollection。

Dictionary.Values返回一個ValueCollection。

如果由於某種原因需要隱藏字典,可以將Dictionary.Keys和Dictionary.Values強制轉換爲Array/List。