如果我直到運行時才知道T是什麼,纔可以使用反射投射object
類型的對象到MyType<T>
?使用反射投射到通用類型對象
回答
您不能將轉換爲編譯時未知的類型。鑄造實際上僅作爲編譯時構造有用,因爲您需要知道該類型才能直接使用它。
但是,如果您的目標是通過反射來處理對象,那麼情況就不同了。在這種情況下,您可以使用Type.MakeGenericType爲您的對象創建正確的類型。
這將允許您使用反射來處理您的對象。
好的,但你將如何訪問通過反射創建的對象的成員?無論如何,你將不需要它的類型。鑄造問題依然存在。 –
@ OlivierJacot-Descombes你需要知道關於這個類的東西 - 但不是它的具體類型。只要你知道一個屬性或方法的名字,你就可以發現它的類型並且調用它,等等(我同意,在大多數情況下,它沒有什麼用處 - 但有時候這是非常有用的。) –
在這種情況下的訣竅是使用非泛型類與泛型方法。
public class MyType
{
public T GetResult<T>() {
}
}
但是,請注意,這發生在編譯時。泛型讓您有機會在編譯時創建不同類型或方法的「風格」;但仿製藥是不是動態!泛型是類型安全的,只有在編譯時才能實現類型安全(因爲編譯器檢查類型安全性)。
- 1. 將對象投射到通用類型
- 2. C#反射 - 投射參數到類型
- 3. 類型使用C中的「類型」對象投射對象#
- 4. 使用反射投出一個對象
- 5. 將對象投射到未知類型
- 6. 通過反射投射字段到Java中的數組類型
- 7. 確定反射類型是否可以投射到另一種反射類型
- 8. 將對象投射到通用
- 9. 反射 - 將對象投射到未知的超類上?
- 10. 如何使用反射檢查對象的通用類型?
- 11. 如何使用反射投射到通用界面?
- 12. 使用反射來投射一個對象在java中爲Android
- 13. 如何投射對象在C#中使用反射運行時?
- 14. 投射動態對象使用反射鍵入C#
- 15. 將超類的對象投射到子類 - 向下投射
- 16. 使用反射類型爲通用「T」
- 17. 當通過反射創建接口時將對象投射到對象
- 18. 投射指定未知對象類型?
- 19. 無法投射異常類型對象
- 20. 無法投射「System.Collections.Generic.HashSet」類型的對象
- 21. 無法投射WhereSelectListIterator類型的對象
- 22. 如何使用反射來投射對象(如在var類型的對象中)? (OFX特定)
- 23. 使用反射投射錯誤
- 24. C# - 使用反射動態投射
- 25. 投射對象
- 26. 投射對象
- 27. 使用雙反射對象
- 28. 正在投射簡單通用對象
- 29. 無法使用接口投射異常類型的對象
- 30. 無法使用Int64投射System.Func`2類型的對象
是;但是如果它的類型直到運行時才知道,你將無法編譯。 – vcsjones
你能更好地指定你的場景嗎? –
這沒有意義。 Casting是需要編譯時類型的編譯時操作。 – SLaks