I just want get a list from Dictionary values but it's not so simple as it appears !
here the code :
Dictionary<string, List<MyType>> myDico = GetDictionary();
List<MyType> items = ???
I try :
List<MyType> items = new List<MyType>(myDico.values)
But it does not work :-(
This question is related to
c#
list
dictionary
Another variant:
List<MyType> items = new List<MyType>();
items.AddRange(myDico.values);
Use this:
List<MyType> items = new List<MyType>()
foreach(var value in myDico.Values)
items.AddRange(value);
The problem is that every key in your dictionary has a list of instances as value. Your code would work, if each key would have exactly one instance as value, as in the following example:
Dictionary<string, MyType> myDico = GetDictionary();
List<MyType> items = new List<MyType>(myDico.Values);
How about:
var values = myDico.Values.ToList();
Another variation you could also use
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();
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);
My OneLiner:
var MyList = new List<MyType>(MyDico.Values);
You probably want to flatten all of the lists in Values
into a single list:
List<MyType> allItems = myDico.Values.SelectMany(c => c).ToList();
Going further on the answer of Slaks, if one or more lists in your dictionary is null, a System.NullReferenceException
will be thrown when calling ToList()
, play safe:
List<MyType> allItems = myDico.Values.Where(x => x != null).SelectMany(x => x).ToList();
Source: Stackoverflow.com