首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KeyValuePair神秘词典

KeyValuePair神秘词典
EN

Stack Overflow用户
提问于 2014-03-30 16:44:13
回答 1查看 1.7K关注 0票数 0

拿着这段代码

代码语言:javascript
复制
        NWN2GameAreaDictionary areaDictionary = app.Module.Areas;

        IEnumerator enumerator = areaDictionary.Values.GetEnumerator();
        enumerator.MoveNext();
        MessageBox.Show(enumerator.Current.GetType().Name);

        enumerator = areaDictionary.Keys.GetEnumerator();
        enumerator.MoveNext();
        MessageBox.Show(enumerator.Current.GetType().Name);


        foreach (KeyValuePair<string, NWN2GameArea> entry in areaDictionary)
        {
            MessageBox.Show(entry.Key);
            MessageBox.Show(entry.Value.Name);
        }

NWN2GameAreaDictionary从IDictionary继承而来

代码语言:javascript
复制
public class NWN2GameAreaDictionary : OEIDictionaryWithEvents
public abstract class OEIDictionaryWithEvents : DictionaryBase
public abstract class DictionaryBase : IDictionary, ICollection, IEnumerable

当我运行该代码时,我会得到第一个MessageBox和第二个NWN2GameArea的输出,分别是:NWN2GameArea和string。所以任何正常的正常人都会认为前叶循环会起作用.现在还没有

System.InvalidCastException:指定的强制转换无效。

那为什么是..。所以我尝试了一些其他的东西,想知道键和值的类型,我得到了KeyCollection和ValueCollection。但当我想去找那些人的时候.编译器只是说,嘿,伙计,这些类型不存在.啊哈..。这种语言是在沮丧中练习的..。我应该坚持用java。

有人能给我解释一下这种行为吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-30 16:50:11

DictionaryBase是一种非泛型类型,从枚举器返回的对属于DictionaryEntry类型,而不是您试图在foreach循环中转换的泛型KeyValuePair<string, NWN2GameArea>类型。

您可以更改您的foreach循环:

代码语言:javascript
复制
foreach (System.Collections.DictionaryEntry entry in areaDictionary)
{
    MessageBox.Show(entry.Key);
    MessageBox.Show(((NWN2GameArea)entry.Value).Name);
}

或者您可以继承一个泛型集合。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22746707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档