2012-11-11 47 views
2

我已經做了一些關於這方面的研究,這似乎很不可能,但沒有一個答案已經足夠具體到我的問題。我目前有一個Stack<object>,我推送多個不同類型的對象。在我推動它們之前,我將它們裝箱到object,以便它們接受它們。是否有任何可能的方法自動拆箱的對象到原來的unboxed類型?自動拆箱的對象

+0

「自動」是什麼意思?沒有任何代碼?我認爲這是不可能的。 –

+0

我的意思是,這樣的事情......'(thingy.GetType())thingy' – jduncanator

+0

好,'(thingy.GetType())thingy'類型的thingy'是對象,所以你正在將'Object'轉換爲'對象' – Mayank

回答

0

有沒有Automagic的方法來做到這一點。

嘗試這雖然

var objT = (T)Convert.ChangeType(obj, typeof(T));

var tuple = new Tuple<object, Type>(someObject, typeof(someObject)); 

stack.Push(tuple); 
+0

事情是'T'是未知的 – jduncanator

+0

@jduncanator你可能想把一個'Tuple'推到Stack'instaed。 'Stack >',比你可以使用'Tuple'中的類型你回來 – Mayank

+0

我正在考慮這個,但我想我會問,然後我做了一個假設。通用方法會有幫助嗎? – jduncanator

2

您可以使用擴展方法OfType<OneOfTheTypes>()只得到澆鑄成正確類型的特定類型的對象。

您無法使用編譯時類型的對象具有的運行時類型的兼容類型自動將對象轉換爲變量。
變量的類型是編譯時類型,如果編譯器不知道內容是編譯時該類型的內容。編譯器不知道堆棧中每個對象實際具有哪種運行時類型。您必須向編譯器(通過強制轉換)承諾運行時類型實際上與編譯時類型相匹配。

但坦率地說。這種「檢查我有什麼類型」是一種不良設計的典型氣味。如果您有相似類型的對象或對不同類型的對象使用不同類型的存儲,請嘗試使用通用基類來設計您的代碼。

+0

它是一個Flash ByteCode分析器,可以將不同類型的數據從一個類型對象堆棧中彈出或彈出。我需要能夠在彈出後以原始類型獲得它們,以便讀取它們的屬性。 – jduncanator