IEnumerable <KeyValuePair <>>에서 사전 다시 작성


173

을 반환하는 메서드가 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");

답변:


329

.NET 3.5 또는 .NET 4를 사용하는 경우 LINQ를 사용하여 사전을 쉽게 만들 수 있습니다.

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

와 같은 것은 IEnumerable<T1, T2>없지만 a KeyValuePair<TKey, TValue>는 괜찮습니다.


15
Dictionary <TKey, TValue>가 IEnumerable <KeyValuePair <TKey, TValue >>를 구현한다고 가정하면 인수가 필요없는 호출이있을 것입니다. 당신 자신을 만들기에 충분히 쉬운.
Casey

6
@ DanVerdolino 알고 있습니다. IEnumerable의 KVP로 할 수있는 가장 일반적인 작업 중 하나와 비슷하다고 생각할 것입니다.
Casey

17
2016 년 지금, 나는 여전히 이것을 구글해야했습니다. 당신을 위해 생성자가있을 것이라고 생각할 것 Dictionary그이했다 IEnumerable<KeyValuePair<TKey, TValue>>처럼 List<T>됩니다 IEnumerable<T>. 또한 키 / 값 쌍을 사용 하지 AddRange않거나 심지어 Add짝을 이룹니다. 무슨 일이야?
die maus

5
이제 2017 년이며 이것을 확장 방법으로 추가 할 수 있습니다!
Chris Bush

2
MoreLinq 를 통해 많은 ".net 코어에 <명백한 기능>이 없다고 믿을 수 없습니다" . 매개 변수가없는 IEnumerable <KeyValuePair> 포함->ToDictionary()
aaaaaa

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.