IDictionary<TKey, TValue>
실제로는 IEnumerable<KeyValuePair<TKey, TValue>>
입니다. 이것은 처음에 IDictionary<TKey, TValue>
에서 LINQ 연산자를 사용할 수있는 이유입니다.
그러나 LINQ 연산자는 deferred execution을 제공하기위한 것이며 결과는 IEnumerable<T>
을 통해 반복하기 시작할 때까지 실제로 생성되지 않는다는 것을 의미합니다.
IDictionary<TKey, TValue>
에서 제공하는 IEnumerable<T>
구현의 방법으로 오는 ICollection<T>
interface이 원칙의 위반, LINQ 대신 IEnumerable<KeyValuePair<TKey, TValue>>
의 IDictionary<TKey, TValue>
를 반환한다면 다음 목록을 구체화해야한다는 것을 의미한다 (T
는 KeyValuePair<TKey, TValue>
임) (따라서 IEnumerable<KeyValuePair<TKey, TValue>>
반환 값).
당연히 주위에 Enumerable class
에있는 ToDictionary
확장 방법을 호출하는 것이지만 (다른 사람들이 언급 한 것처럼), 약간의 뒷 이야기는 결코 아프지 않습니다.
사전을 필터링 할 때 무엇을 기대합니까? 값 또는 키? – Madman
http://stackoverflow.com/a/2636628/1004522 –