如何在 C# 中将 KeyValuePair 转换为字典

本文关键字:转换 字典 KeyValuePair 中将 | 更新日期: 2023-09-27 18:32:20

鉴于ToDictionary在C#中不可用,如何将KeyValuePair转换为Dictionary

如何在 C# 中将 KeyValuePair 转换为字典

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