我正在为基于文本的游戏构建解析器,尝试更像是它。所以我想将所有可能的动词和名词存储到他们自己的字典中。但是在尝试从字典中检索字符串键时出现错误...
在我的Dictionary类中,我创建了Verbs字典,如下所示:
public Dictionary<string, Action> Verbs = new Dictionary<string, Action>();
然后我继续为它添加一些值:
public void PopulateVerbs()
{
Verbs.Add("MOVE", Action.MoveAction);
}
在我的VerbAction类中,我有基于输入执行操作的方法:
Action Move = dictionary.Verbs["MOVE"];
public void MoveAction()
{
Console.WriteLine("You moved...");
}
最后,在我的CommandHandler类中,我处理输入:
if (InputToken[0] == dictionary.Verbs["MOVE"])
Action.MoveAction();
这就是我得到错误的地方,它说我试图检索的[“MOVE”]字符串实际上是一个动作,所以我有点困惑。我在这里缺少什么?
答案 0 :(得分:3)
动词[&#34; MOVE&#34;]将获得与键&#34; MOVE&#34;一起存储的值,因此它将返回在这种情况下的行动。我假设InputToken是一个字符串列表,并且假设你有一个充满字符串/动作值的字典代表你的行为,我可能会尝试这样的事情,所以你不需要一堆if检查:
取
if (InputToken[0] == dictionary.Verbs["MOVE"])
Action.MoveAction();
使用字典对你有利:
Action theAction = dictionary.Verbs[InputToken[0]];
theAction();
您也可以进一步缩小:
dictionary.Verbs[InputToken[0]]();
此外,字典是一个相当健壮的类,因此您可以使用其功能开始添加错误处理检查(如果Verbs.ContainsKey等)