gpt4 book ai didi

.net - 通过非泛型 IDictionary 枚举时,无法将泛型字典项转换为 DictionaryEntry

转载 作者:行者123 更新时间:2023-12-05 00:02:39 31 4
gpt4 key购买 nike

我有一些代码迭代非泛型 IDictionary 首先调用 LINQ Cast 方法。但是,即使我通过非泛型 IDictionary 专门使用它,在传递泛型字典实现时我也会得到一个无效的强制转换异常。界面。

IDictionary dict = new Dictionary<object, object> {{"test", "test"}};
foreach (var item in dict)
{
Debug.Assert(item is DictionaryEntry); // works
}
dict.Cast<DictionaryEntry>().ToList(); // FAILS

当正常迭代没有失败时,为什么上面的 Cast 方法会失败?是否有可靠的方法将非通用字典转换为 DictionaryEntry 的枚举?不求助于手动列表构建?

最佳答案

问题是 IEnumerableDictionary<TKey,TValue> 上实现枚举 KeyValuePairs。访问 IDictionary将使用 IDictionary.GetEnumerator返回 IDictionaryEnumerator 的函数(在内部,这告诉内部 Enumerator 类上的 IEnumerator 函数要返回的类型。)而 Cast 函数对 IEnumerable 进行操作,这将使其返回 KeyValuePair。
如果你真的必须使用非泛型接口(interface)和 DictionaryEntry,你可以编写自己的 Cast 方法来解决这个问题

IEnumerable<DictionaryEntry> CastDE(IDictionary dict) {
foreach(DictionaryEntry item in dict)
yield return item;
}

关于.net - 通过非泛型 IDictionary 枚举时,无法将泛型字典项转换为 DictionaryEntry,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7683294/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com