如何将字典值作为通用列表

我只想从字典值中获取一个列表,但它并不像看起来那么简单!

这里的代码是:

Dictionary<string, List<MyType>> myDico = GetDictionary(); List<MyType> items = ??? 

我尝试:

 List<MyType> items = new List<MyType>(myDico.values) 

但它不起作用:-(

当然,myDico.Values是List<List<MyType>>

如果你想扁平你的列表,使用Linq

 var items = myDico.SelectMany (d => d.Value).ToList(); 

您可能想要将所有列表中的列表Values到一个列表中:

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

怎么样:

 var values = myDico.Values.ToList(); 

另一个变体:

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

我的OneLiner:

 var MyList = new List<MyType>(MyDico.Values); 

进一步回答Slaks的问题,如果字典中的一个或多个列表为空,则在调用ToList()时将抛出System.NullReferenceException

 List<MyType> allItems = myDico.Values.Where(x => x != null).SelectMany(x => x).ToList(); 

用这个:

 List<MyType> items = new List<MyType>() foreach(var value in myDico.Values) items.AddRange(value); 

问题是你的字典中的每个键都有一个实例列表作为值。 如果每个关键字都只有一个实例作为值,那么您的代码将起作用,如下例所示:

 Dictionary<string, MyType> myDico = GetDictionary(); List<MyType> items = new List<MyType>(myDico.Values); 
  List<String> objListColor = new List<String>() { "Red", "Blue", "Green", "Yellow" }; List<String> objListDirection = new List<String>() { "East", "West", "North", "South" }; Dictionary<String, List<String>> objDicRes = new Dictionary<String, List<String>>(); objDicRes.Add("Color", objListColor); objDicRes.Add("Direction", objListDirection); 

你也可以使用另一个变化

 MyType[] Temp = new MyType[myDico.Count]; myDico.Values.CopyTo(Temp, 0); List<MyType> items = Temp.ToList(); 
 Dictionary<string, MyType> myDico = GetDictionary(); var items = myDico.Select(d=> d.Value).ToList();