2012-01-19 33 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。