Каков наилучший способ преобразовать словарь в пользовательский список типов KeyValuePair? - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть класс:

public class MyKeyValuePair
{
    public string Key;
    public string Value;

    ...
}

Я хотел бы знать, есть ли лучший способ сделать это, чем это:

List<MyKeyValuePair> myList;
Dictionary<string,string> dict;

foreach(var pair in dict)
{
    myList.add(new MyKeyValuePair(pair.Key, pair.Value))
}

Ответы [ 2 ]

4 голосов
/ 20 апреля 2020

Линк подход

Dictionary<string,string> dict; //input
List<MyKeyValuePair> result = dict.Select(x => new MyKeyValuePair() { 
                                                 Key = x.Key, 
                                                 Value = x.Value}).ToList();
1 голос
/ 20 апреля 2020

Как указывалось в комментариях @ Корак , вы можете просто использовать KeyValuePair<TKey,TValue> Struct вместо создания собственного MyKeyValuePair класса:

var list = dict
    .Select(x => new KeyValuePair<string, string>(x.Key, x.Value))
    .ToList();

Или еще лучше:

var list = new List<KeyValuePair<string, string>>(dict)

Еще лучше:

var list = dict.ToList();

Второй и третий подходы работают, потому что Dictionary<TKey,TValue> реализует IEnumerable<KeyValuePair<TKey,TValue>>(), который является конструктором List<KeyValuePair<TKey,TValue>>(). Это также означает, что он может использовать метод расширения ToList.

Структуры также копируются по значению , а не по , ссылка . Это также указано в MSDN :

Типы структуры имеют семантику значений. То есть переменная типа структуры содержит экземпляр типа. По умолчанию значения переменных копируются при присваивании, передавая аргумент методу и возвращая результат метода. В случае переменной типа структуры, экземпляр типа копируется. Для получения дополнительной информации см. Типы значений .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...