IEnumerable <KeyValuePair <>>から辞書を再作成する


172

を返すメソッドがありますがIEnumerable<KeyValuePair<string, ArrayList>>、一部の呼び出し元は、メソッドの結果を辞書にする必要があります。をに変換しIEnumerable<KeyValuePair<string, ArrayList>>Dictionary<string, ArrayList>使用できるようにするにはどうすればよいTryGetValueですか?

方法:

public IEnumerable<KeyValuePair<string, ArrayList>> GetComponents()
{
  // ...
  yield return new KeyValuePair<string, ArrayList>(t.Name, controlInformation);
}

発信者:

Dictionary<string, ArrayList> actual = target.GetComponents();
actual.ContainsKey("something");

重複の可能性はありますか?stackoverflow.com/questions/7850334/...
Coolkau

回答:


328

.NET 3.5または.NET 4を使用している場合は、LINQを使用して簡単に辞書を作成できます。

Dictionary<string, ArrayList> result = target.GetComponents()
                                      .ToDictionary(x => x.Key, x => x.Value);

ようなものはありませんIEnumerable<T1, T2>が、KeyValuePair<TKey, TValue>細かいですが。


15
Dictionary <TKey、TValue>がIEnumerable <KeyValuePair <TKey、TValue >>を実装していることを考えると、引数を必要としない呼び出しがあると思いますが、まあ。自分で作るのに十分なほど簡単です。
ケーシー

6
@DanVerdolino私は知っています。これは、KVPのIEnumerableを使用して実行する最も一般的なことの1つであると考えるでしょう。
ケーシー

17
2016年、そして私はまだこれをググる必要がありました。あなたはのコンストラクタがあるだろうと思いたいDictionaryかかっているIEnumerable<KeyValuePair<TKey, TValue>>だけのようList<T>なりますIEnumerable<T>。また、キー/値のペアが存在しないAddRangeか、Addそれが必要です。どうしたの?
マウスを

5
今が2017年で、これを拡張メソッドとして追加できます!
クリスブッシュ

2
多くの ".netコアに<明白な機能>がないとは信じられない"がMoreLinqによって解決されています。パラメータなしIEnumerableを含む<KeyValuePair> - >ToDictionary()
AAAAAA

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.