2015-10-23 59 views
0

我寫一個遊戲的團結,我想使用多態訪問2子類,但不斷收到錯誤:不能從源類型轉換爲目標類型

Can not cast from source type to destination type

我有一個序列化的列表Places,我試圖貶低爲Property,這是Place的子類。我怎麼能夠在Unity中做到這一點?

((Property)Board.GetBoardPlace(Players[PlayerTurn].Position)).Owner = Players[PlayerTurn]; 
+0

[downcast and upcast]可能的重複(http://stackoverflow.com/questions/1524197/downcast-and-upcast) – rutter

+0

對於你在代碼中所做的事情,轉換可能是不必要的。你能分享更多的代碼和/或演員的理由嗎?此外,這不是一個真正的Unity問題,所以我要刪除該標籤並將其標記爲C#而不是... –

回答

0

如果您Place類型的列表中的項目使用的基本類型Place,然後I don't think you can/should downcast (or rather, do type conversion) in this manner,至少不會像C#託管語言最初實例化。考慮重新設計,或填充你的列表時,實例化的項目,如Property類型:

List<Place> Places = new List<Place>(); 
Places.Add(new Property()); 

後來的後來,你可以施展他們鍵入Property當你需要使用它們:

Property property = Places[0] as Property; 
if (property != null){ 
    // Conversion successful 
} 

您可以閱讀在這Stack Overflow question更多。希望這可以幫助!如果您有任何問題,請告訴我。

+0

問題是這些項目在編輯器中丟失。儘管這些項目屬於Property類型,但是在我實例化它們的代碼中沒有地方。如果它完成int他代碼使用...新的屬性()我認爲我會很好,但因爲我想從編輯器中刪除一個動態板沒有辦法做到這一點。我認爲在編輯器中拖動Property屬性是等價的,但它不是。 – Celestrial

相關問題