我只是想从字典值中获取一个列表,但它并不像看起来那么简单!
这里是代码:
Dictionary<string, List<MyType>> myDico = GetDictionary();
List<MyType> items = ???
我试试:
List<MyType> items = new List<MyType>(myDico.values)
但它不起作用: - (
答案 0 :(得分:77)
怎么样:
var values = myDico.Values.ToList();
答案 1 :(得分:48)
当然,myDico.Values是List<List<MyType>>
。
如果您想平展列表,请使用Linq
var items = myDico.SelectMany (d => d.Value).ToList();
答案 2 :(得分:25)
您可能希望将Values
中的所有列表展平为一个列表:
List<MyType> allItems = myDico.Values.SelectMany(c => c).ToList();
答案 3 :(得分:25)
另一种变体:
List<MyType> items = new List<MyType>();
items.AddRange(myDico.values);
答案 4 :(得分:7)
我的OneLiner:
var MyList = new List<MyType>(MyDico.Values);
答案 5 :(得分:1)
进一步回答Slaks的答案,如果你的字典中的一个或多个列表为空,则在调用System.NullReferenceException
时会抛出ToList()
,安全地播放:
List<MyType> allItems = myDico.Values.Where(x => x != null).SelectMany(x => x).ToList();
答案 6 :(得分:0)
使用此:
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);
答案 7 :(得分:0)
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);
答案 8 :(得分:0)
您还可以使用另一种变体
MyType[] Temp = new MyType[myDico.Count];
myDico.Values.CopyTo(Temp, 0);
List<MyType> items = Temp.ToList();
答案 9 :(得分:0)
Dictionary<string, MyType> myDico = GetDictionary();
var items = myDico.Select(d=> d.Value).ToList();