Possible Duplicate:
Recreating a Dictionary from an IEnumerable
在类型为Dictionary<TKey, TValue>
的字典上使用Where方法时,您会得到一个IEnumerable<KeyValuePair<TKey, TSource>>
,这破坏了我在开始时选择的数据类型。我想还一本字典。
也许我没有使用正确的过滤器功能。那么,通常如何从字典中过滤元素?
谢谢
最佳答案
IDictionary<TKey, TValue>
实际上扩展了IEnumerable<KeyValuePair<TKey, TValue>>
。这就是为什么可以首先在IDictionary<TKey, TValue>
上使用LINQ运算符的原因。
但是,LINQ运算符返回旨在提供IEnumerable<T>
的deferred execution,这意味着直到开始遍历IEnumerable<T>
才真正生成结果。IEnumerable<T>
提供的IDictionary<TKey, TValue>
实现是通过ICollection<T>
interface(其中T
是KeyValuePair<TKey, TValue>
)实现的,这意味着如果LINQ将返回IDictionary<TKey, TValue>
而不是IEnumerable<KeyValuePair<TKey, TValue>>
,则它将必须实现该列表,从而违反其原则(因此,IEnumerable<KeyValuePair<TKey, TValue>>
返回值)。
当然,解决该问题的方法是在ToDictionary
上调用Enumerable class
扩展方法(正如其他人所提到的那样),但是一点点背景知识就永远不会受到伤害。
关于c# - 保持Where()与字典一致,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11187286/