2014-05-13 26 views
0

我有以下設置;我如何將抽象列表投射到它的具體類型

public abstract class StageObject 
{ 
} 
public class StageImage : StageObject 
{ 
    public int Image; 
} 
public class StageStrip : StageObject 
{ 
    public int Strip; 
} 

我做了以下工作;

StageList = new List<StageObject>(); 
StageList.Add(new StageStrip()); 
StageList.Add(new StageImage()); 

我很想能夠施展的數組元素,因爲它的具體類型,像這樣的,但我得到一個錯誤;

(StageStrip) StageList[0].Strip = 2; 

我能做到這一點的唯一方法是創建一個臨時變量並將其轉換爲數組。有沒有辦法,我可以做到這一點,而不創建臨時變量?

+1

由於優先順序,您會收到錯誤。 C#正在做的是獲取'StageList [0] .Strip',它是一個'int'並試圖將其轉換爲'StageStrip'類型,並且由於C#不知道如何將int轉換爲鍵入'StageStrip',它給你一個錯誤。環繞'(StageStrip)StageList [0]'在括號中,它應該工作。 – Icemanind

+0

非常感謝你 – blink

回答

8
((StageStrip)StageList[0]).Strip = 2; 
+3

只是爲了增加信息,如果由於某種原因你想要將它們全部投射出去,你可能會發現'.Cast ()'很有用。或者'.OfType ()'如果它們可能不全都是 - 它往往更有用。 – Magus

+0

非常有用的非常感謝 – blink