2016-03-02 64 views
2

在C#中使用Unity我试图创建一个类的字典。创建词典<string,class>

所有类从基类(建筑脚本)里面有多个虚拟方法的

我已经建立了我的字典从而继承:

Dictionary<string, BuildingScript> buildingScripts = new Dictionary<string, BuildingScript>(); 

,我试图添加到字典因此:

buildingScripts.Add("Farm", FarmScript); 
buildingScripts.Add("Hunter", HunterScript); 
buildingScripts.Add("Fisher", FisherScript); 

编译器正在识别继承,所以我正在试图找出我错过了什么。

错误消息是:

  • 错误CS0119:表达式表示type', where a变量 ' value' or方法组' 预计
  • 关于“System.Collections.Generic最好重载方法匹配。 Dictionary.Add(字符串, BuildingScript)'有一些无效参数
  • 参数#2' cannot convert对象的表达式类型`BuildingScript'
+0

添加类型对象(实例),而不是自己键入 –

+0

您是否创建了'FarmScript,HunterScript和FisherScript'的实例? – Gabe

回答

6

你的字典已经被宣布为Dictionary<string, BuildingScript>,所以它的价值应该是一个实例BuildingScript

考虑差异:FarmScript本身是类型,但new FarmScript()是该类型的实例。

所以,你的代码应该是这样的:

buildingScripts.Add("Farm", new FarmScript()); 
buildingScripts.Add("Hunter", new HunterScript()); 
buildingScripts.Add("Fisher", new FisherScript()); 
+0

好的方法来削减额外的代码。 也谢谢! – Wibble

1

虽然职位没有真正显示,但他们似乎是班对我说:

FarmScript //class 
HunterScript //class 
FisherScript //class 

,而你需要的是实例:

FarmScript farmScript = new FarmScript(); //instances of the classes 
HunterScript hunterScript = new HunterScript(); 
FisherScript fisherScript = new FisherScript(); 

这应该是OK:

buildingScripts.Add("Farm", farmScript); 
buildingScripts.Add("Hunter", hunterScript); 
buildingScripts.Add("Fisher", fisherScript); 
+0

如果您在两个地方都删除了“名称”一词,并提出了实例,我希望得到您的答案。 – Enigmativity

+0

是的,我只是为自己工作,但当你花时间发布答案我接受你的......谢谢你! – Wibble

+0

@Wibble没问题。很高兴你自己也明白了! ;) – Ian

1

好吧,自己解决吧....虽然如果有更好的方法来做到这一点(我确信有这样的赌注),那么请张贴它们,让我可以学习。

我改变了添加对字典是这样的:

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

所有的问题解决了!

+0

很高兴你明白! ;) – Ian

+1

这样做的唯一方法是创建每个类的实例,你已经完成了。通过跳过变量声明并遵循Andy的例子,您可以节省额外的行数 - 但这只是个人的品味,因为这样做不会改变应用程序的运行方式或存储对象的方式。总的来说,这两种方法工作得很好,在低层次上完全一样。做得好。 :) – Gabe

相关问题