Как преобразовать KeyValuePair
в словарь, поскольку ToDictionary
недоступен в С#?
Как преобразовать KeyValuePair в словарь, поскольку ToDictionary недоступен в С#?
Ответ 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);