如何在 C# 中将 KeyValuePair 转换为字典
本文关键字:转换 字典 KeyValuePair 中将 | 更新日期: 2023-09-27 18:32:20
鉴于ToDictionary
在C#中不可用,如何将KeyValuePair
转换为Dictionary
?
var dictionary = new Dictionary<string, object> { { kvp.Key, kvp.Value } };
ToDictionary
确实存在于 C# 中(编辑:与您想到的ToDictionary
不同),可以像这样使用:
var list = new List<KeyValuePair<string, object>>{kvp};
var dictionary = list.ToDictionary(x => x.Key, x => x.Value);
在这里,list
可以是任何东西的List
或其他IEnumerable
。第一个 lambda 显示如何从列表项中提取键,第二个 lambda 显示如何提取值。在这种情况下,它们都是微不足道的。
如果我理解正确,您可以按以下步骤操作:
new[] { keyValuePair }.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
使用 System.Linq.Enumerable.ToDictionary() 扩展方法来转换一个或多个 KeyValuePair 的集合
Dictionary<string,string> result = new[] {
new KeyValuePair ("Key1", "Value1"),
new KeyValuePair ("Key2", "Value2")
}.ToDictionary(pair => pair.Key, pair => pair.Value);
或者(如果你不能使用 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);
创建 KeyValuePair 的集合,并确保在 using
语句中导入 System.Linq。
然后,您将能够看到.ToDictionary() 扩展方法。
public IList<KeyValuePair<string, object>> MyDictionary { get; set; }
升级到 .net 5 或更高版本,并将它们传递给构造函数:
var x = new Dictionary<string, string>(new[] { new KeyValuePair<string, string>("key1", "val1"), new KeyValuePair<string, string>("key2", "val2") });
自己实现它作为扩展方法。
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