创建字典<string,class =“”>

时间:2016-03-02 07:29:12

标签: c# .net dictionary

在使用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;
  • ”   

3 个答案:

答案 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);

问题全部解决了!