在使用Unity的C#中,我正在尝试创建一个类的字典。
所有类都继承自具有许多虚方法的基类(构建脚本)
我已经设置了我的词典:
Dictionary<string, BuildingScript> buildingScripts = new Dictionary<string, BuildingScript>();
我正在尝试添加到词典中:
buildingScripts.Add("Farm", FarmScript);
buildingScripts.Add("Hunter", HunterScript);
buildingScripts.Add("Fisher", FisherScript);
编译器正在重新认识继承,所以我想弄清楚我错过了什么。
错误消息是:
- 错误CS0119:表达式表示
type', where a
变量&#39;,value' or
方法组&#39;预计- 最佳重载方法匹配&#39; System.Collections.Generic.Dictionary.Add(string, BuildingScript)&#39;有一些无效的论点
- 参数
”#2' cannot convert
对象&#39;表达式以输入“BuildingScript&#39;
答案 0 :(得分:6)
您的词典已被声明为Dictionary<string, BuildingScript>
,因此其值应为BuildingScript
的实例。
考虑差异:FarmScript
本身就是类型,但new FarmScript()
是该类型的实例。
所以你的代码应该是这样的:
buildingScripts.Add("Farm", new FarmScript());
buildingScripts.Add("Hunter", new HunterScript());
buildingScripts.Add("Fisher", new FisherScript());
答案 1 :(得分:1)
虽然帖子中没有真正显示,但它们似乎是我的课程:
FarmScript //class
HunterScript //class
FisherScript //class
虽然您需要的是实例:
FarmScript farmScript = new FarmScript(); //instances of the classes
HunterScript hunterScript = new HunterScript();
FisherScript fisherScript = new FisherScript();
这应该没问题:
buildingScripts.Add("Farm", farmScript);
buildingScripts.Add("Hunter", hunterScript);
buildingScripts.Add("Fisher", fisherScript);
答案 2 :(得分:1)
好的,我自己解决了....虽然如果有更好的方法可以做到这一点(我确定有赌注)那么请发布它们以便我可以学习。
我将Add添加到了Dictionary中,如下所示:
FarmScript bs1 = new FarmScript();
DictionaryStore.buildingScripts.Add("Farm", bs1);
HunterScript bs2 = new HunterScript();
DictionaryStore.buildingScripts.Add("Hunter", bs2);
FisherScript bs3 = new FisherScript();
DictionaryStore.buildingScripts.Add("Fisher", bs3);
问题全部解决了!