Linq 如何转换KeyValuePair的IEnumerable<;x、 y>;查字典?

Linq 如何转换KeyValuePair的IEnumerable<;x、 y>;查字典?,linq,dictionary,todictionary,Linq,Dictionary,Todictionary,是否有简化的方法将KeyValuePair的列表/可枚举项转换为字典 Linq转换、.ToDictionary()扩展不起作用 .ToDictionary(kvp=>kvp.Key,kvp=>kvp.Value); 这不是要做更多的工作吗。您可以创建自己的扩展方法,该方法将按预期执行 public static class KeyValuePairEnumerableExtensions { public static Dictionary<TKey, TValue&

是否有简化的方法将
KeyValuePair
的列表/可枚举项转换为
字典

Linq转换、.ToDictionary()扩展不起作用

.ToDictionary(kvp=>kvp.Key,kvp=>kvp.Value);

这不是要做更多的工作吗。

您可以创建自己的扩展方法,该方法将按预期执行

public static class KeyValuePairEnumerableExtensions
{
    public static Dictionary<TKey, TValue> ToDictionary<TKey, TValue>(this IEnumerable<KeyValuePair<TKey, TValue>> source)
    {
        return source.ToDictionary(item => item.Key, item => item.Value);
    }
}
公共静态类KeyValuePairEnumerableExtensions
{
公共静态字典ToDictionary(此IEnumerable源)
{
返回source.ToDictionary(item=>item.Key,item=>item.Value);
}
}

这是我能制作的最好的:

public static IDictionary<TKey, TValue> ToDictionary<TKey, TValue>(IEnumerable<KeyValuePair<TKey, TValue>> keyValuePairs)
{
    var dict = new Dictionary<TKey, TValue>();
    var dictAsIDictionary = (IDictionary<TKey, TValue>) dict;
    foreach (var property in keyValuePairs)
    {
        (dictAsIDictionary).Add(property);
    }
    return dict;
}
公共静态IDictionary to dictionary(IEnumerable keyValuePairs)
{
var dict=新字典();
var dictAsIDictionary=(IDictionary)dict;
foreach(keyValuePairs中的var属性)
{
(字典)。添加(属性);
}
返回命令;
}

我比较了使用Linq.ToDictionary将2000万个键值对的IEnumerable转换为字典的速度与此转换的速度。这个版本在Linq版本中运行了80%的时间。所以速度更快,但不是很多。我认为你真的需要重视这20%的节省,使之值得使用。

与其他类似,但使用
new
而不是
ToDictionary
(因为
new
已经支持
KeyValuePair
枚举)并允许传递
IEqualityComparer

为了完整起见,还包括一个
ToReadOnlyDictionary
变体

public static class EnumerableKeyValuePairExtensions {

    public static Dictionary<TKey, TValue> ToDictionary<TKey, TValue>(this IEnumerable<KeyValuePair<TKey, TValue>> keyValuePairs, IEqualityComparer<TKey>? comparer = null)
    where TKey : notnull
        => new Dictionary<TKey, TValue>(keyValuePairs, comparer);

    public static ReadOnlyDictionary<TKey, TValue> ToReadOnlyDictionary<TKey, TValue>(this IEnumerable<KeyValuePair<TKey, TValue>> keyValuePairs, IEqualityComparer<TKey>? comparer = null)
    where TKey : notnull
        => new ReadOnlyDictionary<TKey, TValue>(keyValuePairs.ToDictionary(comparer));
}
公共静态类EnumerableKeyValuePairex{
公共静态字典ToDictionary(此IEnumerable keyValuePairs,IEqualityComparer?comparer=null)
其中TKey:notnull
=>新字典(keyValuePairs,comparer);
public static ReadOnlyDictionary到adonlydictionary(此IEnumerable keyValuePairs,IEqualityComparer?comparer=null)
其中TKey:notnull
=>新的只读字典(keyValuePairs.ToDictionary(comparer));
}

当你说它不起作用时,什么不起作用?无法编译?没有返回您期望的输出?例外情况?检查帖子,没有更干净的方法,但它可以做到!