我有System.Collections.Generic.Dictionary<A, B> dict
其中 A 和 B 是类,实例 A a
(其中 dict.ContainsKey(a)
为真)。
是否可以得到包含a
的KeyValuePair?直接来自字典?
或者我是否需要创建一个新的 KeyValuePair:new KeyValuePair<A, B>(a, dict[a])
?
最佳答案
您需要创建一个新的 KeyValuePair
1 - 但请记住,KVP 无论如何都是一种值类型(一种结构),因此您不会通过这样做引入新的低效率。任何返回 KVP 的方法都会创建一个副本——您只是直接创建实例。
如果需要,您始终可以向 IDictionary<TKey, TValue>
添加扩展方法:
public static KeyValuePair<TKey, TValue> GetEntry<TKey, TValue>
(this IDictionary<TKey, TValue> dictionary,
TKey key)
{
return new KeyValuePair<TKey, TValue>(key, dictionary[key]);
}
如注释中所述,存储在字典中的键完全有可能与提供的键相同,只是在语义上相同——通过一些可以由 IEqualityComparer
自定义的语义(例如,与不区分大小写的字典一样。)在这种情况下,上面的代码不会返回字典中的实际条目,而是返回一个包含您提供的用于查找的键的条目。不幸的是,没有找到原始 key 的有效方法 - 你必须遍历字典:(
1 我知道您可以遍历字典条目并以这种方式找到合适的条目,但我看不出您有什么理由想要这样做一个非常好的索引器,它是 O(1) 而不是 O(N)。
关于c# - 直接从 Dictionary<> 获取 KeyValuePair<>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1619090/