C# 如何将字典值作为通用列表获取

C# 如何将字典值作为通用列表获取,c#,list,dictionary,C#,List,Dictionary,我只是想从字典值中得到一个列表,但它并不像看上去那么简单 代码如下: Dictionary<string, List<MyType>> myDico = GetDictionary(); List<MyType> items = ??? Dictionary myDico=GetDictionary(); 列表项=??? 我尝试: List<MyType> items = new List<MyType>(myDico.values

我只是想从字典值中得到一个列表,但它并不像看上去那么简单

代码如下:

Dictionary<string, List<MyType>> myDico = GetDictionary();
List<MyType> items = ???
Dictionary myDico=GetDictionary();
列表项=???
我尝试:

List<MyType> items = new List<MyType>(myDico.values)
List items=新列表(myDico.values)
但它不起作用:-(

使用以下命令:

List<MyType> items = new List<MyType>()
foreach(var value in myDico.Values)
    items.AddRange(value);
List items=新列表()
foreach(myDico.Values中的var值)
items.AddRange(值);
问题是字典中的每个键都有一个实例列表作为值。如果每个键都有一个实例作为值,则代码将正常工作,如下例所示:

Dictionary<string, MyType> myDico = GetDictionary();
List<MyType> items = new List<MyType>(myDico.Values);
Dictionary myDico=GetDictionary();
列表项=新列表(myDico.Values);

您可能希望将
值中的所有列表展平到单个列表中:

List<MyType> allItems = myDico.Values.SelectMany(c => c).ToList();
List allItems=myDico.Values.SelectMany(c=>c.ToList();

当然,myDico。值是
列表

如果您想美化您的列表,请使用Linq

var items = myDico.SelectMany (d => d.Value).ToList();
List objListColor=new List(){“红色”、“蓝色”、“绿色”、“黄色”};
List objListDirection=新列表(){“东”、“西”、“北”、“南”};
Dictionary objDicRes=新字典();
添加(“颜色”,objListColor);
添加(“方向”,objListDirection);
另一种变体:

    List<MyType> items = new List<MyType>();
    items.AddRange(myDico.values);
List items=newlist();
items.AddRange(myDico.Value);

您还可以使用另一种变体

MyType[] Temp = new MyType[myDico.Count];
myDico.Values.CopyTo(Temp, 0);
List<MyType> items = Temp.ToList();
MyType[]Temp=newmytype[myDico.Count];
myDico.Values.CopyTo(临时值,0);
列表项=临时列表();
我的OneLiner:

var MyList = new List<MyType>(MyDico.Values);
var MyList=新列表(MyDico.Values);
字典myDico=GetDictionary();
var items=myDico.Select(d=>d.Value.ToList();

进一步了解Slaks的答案,如果词典中的一个或多个列表为null,则调用
ToList()
时将抛出一个
系统.NullReferenceException
,注意安全:

List<MyType> allItems = myDico.Values.Where(x => x != null).SelectMany(x => x).ToList();
List allItems=myDico.Values.Where(x=>x!=null)。选择many(x=>x.ToList();
那么:

var values = myDico.Values.ToList();

它以什么方式不起作用?您是否遇到错误?字典是映射到
List
对象的键的集合。因此,字典中有多个
List
s。您是否试图将所有
MyType
s的列表展平为一个列表?在字典中运行一个循环以填充项目列表-看起来很不错直截了当——我不知道是否有一种一步到位的方法。实际上,
值的类型应该是
字典.ValueCollection
。有人知道它为什么是这样实现的吗?让myDico返回列表更有意义。值是Java中的值,还是我遗漏了什么?对我来说很好!Thanks。我想这并不能将字典中的列表平铺成一个列表。对我来说是有效的,对那些结果更糟的人来说很抱歉。那太糟糕了。我希望其他的一个对你有效!看到你在没有真正阅读问题的情况下能获得多少赞成票真是令人惊讶。虽然你回答了我来这里时的问题,但OP实际上问了something else(字典
包含
列表
s).@J.Chang,这不会将值展平,因此使用
dic.values.ToList()
您将生成
列表
而不是展平列表。这仅对每个键上的单个值有效。
List<MyType> allItems = myDico.Values.Where(x => x != null).SelectMany(x => x).ToList();
var values = myDico.Values.ToList();