2012-01-19 3 views
4

私はいくつかのデータを格納する辞書を使用するクラスがあります。ディクショナリにIteratorを持たせるには?

しかし、私は

は、どのように私はこれを行うことができます私のクラスの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にキャストできます。

関連する問題