Подтвердить что ты не робот

Как получить значения словаря в качестве общего списка

Мне просто нужно получить список из значений словаря, но это не так просто, как кажется!

здесь код:

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

Я пытаюсь:

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

Но это не работает: - (

4b9b3361

Ответ 1

Выкл., myDico.Values ​​- List<List<MyType>>.

Используйте Linq, если вы хотите выравнивать свои списки

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

Ответ 2

Как насчет:

var values = myDico.Values.ToList();

Ответ 3

Вероятно, вы хотите сгладить все списки в Values в один список:

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

Ответ 4

Другой вариант:

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

Ответ 5

My OneLiner:

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

Ответ 6

Далее в ответ на Slaks, если один или несколько списков в вашем словаре равны нулю, при вызове ToList() будет выбрано System.NullReferenceException, безопасное воспроизведение:

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

Ответ 7

Используйте это:

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);

Ответ 8

        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);

Ответ 9

Другой вариант, который вы также можете использовать

MyType[] Temp = new MyType[myDico.Count];
myDico.Values.CopyTo(Temp, 0);
List<MyType> items = Temp.ToList();

Ответ 10

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

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