62

鉴于C# 中不可用,如何将 a 转换KeyValuePair为 a ?DictionaryToDictionary

4

6 回答 6

153
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 显示如何从列表项中提取键,第二个显示如何提取值。在这种情况下,它们都是微不足道的。

于 2013-09-23T09:11:43.480 回答
7

如果我理解正确,您可以按以下方式进行:

new[] { keyValuePair }.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
于 2013-09-23T09:12:00.940 回答
1

创建KeyValuePair的集合并确保在using语句中导入 System.Linq。

然后你就可以看到了。ToDictionary()扩展方法。

public IList<KeyValuePair<string, object>> MyDictionary { get; set; }
于 2013-09-23T09:09:15.670 回答
1

或者(如果你不能使用 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);
于 2013-09-23T09:16:48.883 回答
1

使用 System.Linq.Enumerable.ToDictionary() 扩展方法来转换一个或多个 KeyValuePairs 的集合

Dictionary<string,string> result = new[] {  
    new KeyValuePair ("Key1", "Value1"),
    new KeyValuePair ("Key2", "Value2") 
}.ToDictionary(pair => pair.Key, pair => pair.Value);
于 2020-07-23T15:52:52.220 回答
0

自己实现它作为扩展方法。

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

于 2013-09-23T09:11:31.953 回答