2016-03-02 51 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