我有一个 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/