web-dev-qa-db-ja.com

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

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

方法:

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

呼び出し元:

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

.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>は問題ありません。

304
Jon Skeet