c# - 如何仅从字典中获取特定类型的键值对

标签 c# dictionary ienumerable oftype

我有一个 IDictionary (不是通用的,所以我在这里处理 object ),我只想从中获取该 IDictionary 中对应于特定键类型 K 和特定值的元素V 型。有十亿种方法可以做到这一点,但我发现的最优雅的方法似乎是这样的:

Dictionary<K, V> dict = myIDictionary.OfType<KeyValuePair<K, V>>();

这个编译得很好,所以我假设这个方法可以用于字典(它是由 IEnumerable 声明的),但生成的字典是空的,尽管那里肯定有满足这些条件的 KVP。显然我假设 KeyValuePair<K, V>是它所期望的格式,因为这是在字典枚举中使用的格式,但它是其他格式吗?我有什么遗漏的吗?

最佳答案

非泛型 IDictionary不使用KeyValue<T,U>类型,这样您就永远不会有任何匹配项。

您需要解析 DictionaryEntry项目,并转换它们:

Dictionary<K,V> dict = myIDictionary
                          .Cast<DictionaryEntry>()
                          .Where(de => de.Key is K && de.Value is V)
                          .ToDictionary(de => (K)de.Key, de => (V)de.Value);

关于c# - 如何仅从字典中获取特定类型的键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18662791/

相关文章:

C# - 多个服务器的 WMI 查询太慢

javascript - 如何在 Mapbox.js 中的两个坐标之间的直线上移动标记

c# - wpf 按钮上的多内容(图像 + 文本)

c# - NameValueCollection Equals 方法是否比较两个集合是否具有相同的键值对?

java - 指定接口(interface)的反射图

c# - 使用 LINQ 过滤列表

c# - c# 中是否已有条件 Zip 函数?

c# - 使用 Dapper 和 Npgsql 无法从 Guid 列表中进行选择

c# - 使用命名空间

c# - 如何检查两个字典是否包含相同的值?