首页 > 解决方案 > 使用 Linq 将一个字典映射到另一个字典

问题描述

有没有一种优雅的方法可以Dictionary在.NET 框架中使用 Linq 将一个映射到另一个?

这可以通过枚举来完成foreach

var d1 = new Dictionary<string, string>() {
    { "One", "1" },
    { "Two", "2" }
};

// map dictionary 1 to dictionary 2 without LINQ
var d2 = new Dictionary<string, int>();
foreach(var kvp in d1) {
    d2.Add(kvp.Value, int.Parse(kvp.Value));
}

...但我正在寻找一些方法来完成 LINQ:

// DOES NOT WORK
Dictionary<string, int> d2 =
    d1.Select(kvp => {
        return new KeyValuePair<string, int>(kvp.Key, int.Parse(kvp.Value));
    })

标签: c#.netlinqdictionary

解决方案


只需使用命名空间ToDictionary中的扩展方法System.Linq

var d2 = d1.ToDictionary(kvp => kvp.Key, kvp => int.Parse(kvp.Value));

由于Dictionary<TKey, TValue>类实现IEnumerable<KeyValuePair<TKey,TValue>>并且ToDictionaryIEnumerable<T>上述代码的扩展方法工作正常


推荐阅读