私はいくつかのデータを格納する辞書を使用するクラスがあります。ディクショナリにIteratorを持たせるには?
しかし、私は
は、どのように私はこれを行うことができます私のクラスのousideにイテレータを送りたい私のすべてのデータを反復するために、外部からその実装の詳細を非表示にしたいですか?
私はいくつかのデータを格納する辞書を使用するクラスがあります。ディクショナリにIteratorを持たせるには?
しかし、私は
は、どのように私はこれを行うことができます私のクラスのousideにイテレータを送りたい私のすべてのデータを反復するために、外部からその実装の詳細を非表示にしたいですか?
public IEnumerable<KeyValuePair<int, string>> Foo()
{
var implementationDetail = new Dictionary<int, string>
{
{ 1, "foo" },
{ 2, "bar" },
};
return implementationDetail;
}
辞書を使用しているという事実を隠蔽したい場合は 'implementationDetail.Cast
列挙子を返すDictinary.GetEnumerator()
を呼び出すことができます。
_dict.getEnumerator()
を返すことができますが、KeyValuePair項目が生成されます。あなたはIDictionary
を返すかもしれません。
おそらく_dict.Keys.getEnumerator()
、および/または同じ値が必要です。
しかし列挙子を返すことが返すことがはるかに優れた、奇妙である:_dict.Keys as IEnumerable<KeyType>
使用できる辞書を反復処理するには:
Dictionary.GetEnumerator
KeyValuePairsを返します。
Dictionary.Keys
KeyCollectionを返します。
Dictionary.Values
ValueCollectionを返します。
何らかの理由で辞書を非表示にする必要がある場合は、Dictionary.KeysとDictionary.ValuesをArray/Listにキャストできます。
すべての値(参照)を単純な(型付きの)リストにコピーし、そのリストを返しますか? – CodingBarfield
イテレータを返すものは何ですか?外部コードは何を繰り返しますか? –