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

Как преобразовать KeyValuePair в словарь, поскольку ToDictionary недоступен в С#?

Как преобразовать KeyValuePair в словарь, поскольку ToDictionary недоступен в С#?

4b9b3361

Ответ 1

var dictionary = new Dictionary<string, object> { { kvp.Key, kvp.Value } };

ToDictionary существует в С# (редактирование: не тот же ToDictionary, о котором вы думали) и может использоваться следующим образом:

var list = new List<KeyValuePair<string, object>>{kvp};
var dictionary = list.ToDictionary(x => x.Key, x => x.Value);

Здесь list может быть list или другим IEnumerable всего. Первая лямбда показывает, как извлечь ключ из элемента списка, а вторая показывает, как извлечь значение. В этом случае они тривиальны.

Ответ 2

Если я правильно понимаю, вы можете сделать это следующим образом:

new[] { keyValuePair }.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

Ответ 3

Создайте коллекцию KeyValuePair и убедитесь, что System.Linq импортирован в оператор using.

Затем вы сможете увидеть метод расширения ToDictionary().

public IList<KeyValuePair<string, object>> MyDictionary { get; set; }

Ответ 4

Реализовать его самостоятельно как метод расширения.

public static class MyExtensions
{

    public static Dictionary<T1,T2> ToDictionary<T1, T2>(this KeyValuePair<T1, T2> kvp)
    {
      var dict = new Dictionary<T1, T2>();
      dict.Add(kvp.Key, kvp.Value);
      return dict;
    }

}

см. это в действии: https://dotnetfiddle.net/Ka54t7

Ответ 5

В качестве альтернативы (если вы не можете использовать Linq.. хотя мне любопытно, почему..).. реализовать ToDictionary самостоятельно...

public static Dictionary<TKey, TElement> ToDictionary<TSource, TKey, TElement>(IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector) {
    if (source == null)
    {
        throw new ArgumentNullException("source");
    }
    if (keySelector == null) {
        throw new ArgumentNullException("keySelector");
    }
    if (elementSelector == null) {
        throw new ArgumentNullException("elementSelector");
    }

    var dictionary = new Dictionary<TKey, TElement>();
    foreach (TSource current in source) {
        dictionary.Add(keySelector(current), elementSelector(current));
    }
    return dictionary;
}

Пример использования:

var kvpList = new List<KeyValuePair<int, string>>(){
    new KeyValuePair<int, string>(1, "Item 1"),
    new KeyValuePair<int, string>(2, "Item 2"),
};

var dict = ToDictionary(kvpList, x => x.Key, x => x.Value);