作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些代码迭代非泛型 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
DictionaryEntry
的枚举?不求助于手动列表构建?
最佳答案
问题是 IEnumerable
在 Dictionary<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/
我是一名优秀的程序员,十分优秀!