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(其中TKeyValuePair<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/

10-12 06:06