我有以下字典:
IDictionary> myDictionary
我希望将字典中的所有值都作为IList获取....
只是添加一些背景知道我是如何进入这种情况的....
我有一个方法,让我得到一个MyClass列表.然后我有另一种方法将该列表转换为字典,其中key是MyClass的id.稍后......并且无法访问原始列表......我需要获取原始的未分组的MyClass列表.
当我将myDictionary.Values.ToList()传递给一个接受IList的方法时,我得到一个编译错误,说它无法转换
System.Collections.Generic.List>
至:
System.Collections.Generic.IList
现在,我可以理解它已经消失并将每个IList组添加到新列表中作为列表的单独元素....但在这种情况下它并不是我真正想要的.我只想要整个字典中所有值的列表.
那么如何在不循环遍历字典中的每个键值并创建我想要的列表的情况下如何获得我所追求的内容?
注意到很多答案都很老了.
这也有效:
using System.Linq; dict.Values.ToList();
由于字典(或哈希表)的维护方式,这就是你要做的.在内部,实现包含密钥,桶(用于冲突处理)和值.您可能能够检索内部值列表,但您最好使用以下内容:
IDictionary> dict; var flattenList = dict.SelectMany( x => x.Value );
它应该做的伎俩;)SelectMany展平结果,这意味着每个列表被连接成一个长序列(IEnumerable`1).
John的建议的一个变种:
var flattenedValues = dict.Values.SelectMany(x => x);
如果您在列表中需要它们,您当然可以调用ToList:
var flattenedList = dict.Values.SelectMany(x => x).ToList();