我有一個基類,需要一個泛型類型。這可以是EntityObject
或自定義類型的礦。
我需要一種方法來將Base類約束到其他類型,並且我還需要一種方法來檢查Generic是否屬於某種類型。
當我做if (T is EntityObject)
或if (typeof(T) is EntityObject)
它或者說我使用T作爲變量,或者爲typeof(T)
我得到它「永遠不會是給定類型」。多重約束類型或檢查通用是什麼類型?
0
A
回答
2
您可以使用:根據您的要求
if (typeof(T) == typeof(EntityObject))
或
if (typeof(EntityObject).IsAssignableFrom(typeof(T)))
。 (有關更多詳細信息,請參閱Type.IsAssignableFrom
的文檔。)
當然,這是一次執行時間檢查 - 在編譯時您不能有「一個......」約束。根據你的情況,最好有兩個不同名稱和約束的公共方法,它們調用一個不受約束的私有方法(由於只從公共方法中調用,「知道」你有適當的類型)。
0
沒有辦法約束兩個不相關的類型。您可能需要一個通用類型(如接口)或受約束泛型類的兩個版本。
假設T不受約束,可以使用if (typeof(T).Equals(typeof(EntityObject))) { ... }
來檢查T是否屬於某種類型。
相關問題
- 1. CodeDom通用類型約束
- 2. 通用方法多(OR)類型約束
- 3. 通用類約束其中<T>是約束通用類的類型
- 4. 通用類約束:2種類型
- 5. Scala:通用類類型的約束
- 6. 類型約束
- 7. 多種類型約束
- 8. 爲什麼類型約束不夠?
- 9. 爲什麼我需要在通用子類中重新聲明類型約束
- 10. 爲什麼實現具有類型約束的泛型接口的泛型類需要重複這些約束?
- 11. 指定類型約束上的通用泛型類型
- 12. 我對匿名方法類型使用什麼通用約束?
- 13. 什麼是通用類型?
- 14. 使用通用約束與值類型
- 15. F#類型約束
- 16. 泛型類型約束上還是
- 17. 通用約束類型默認值
- 18. 通用類型的簽名約束
- 19. 通用字典上的類型約束
- 20. 類型參數約束是一個類
- 21. 爲什麼泛型類型的表達式引用約束類型而不是運行時類型?
- 22. 通用類型約束禁止某些類型?
- 23. 伴侶類型的Scala類型約束
- 24. 類型約束類型不等式
- 25. 爲什麼我不能將派生泛型類型轉換爲基類非泛型類型(通過約束)?
- 26. Hacklang - 是否可以使用類型常量的類型約束?
- 27. 泛型類型參數的多重約束的優先級
- 28. 指定類型約束約束
- 29. 什麼時候在C#中有用的值類型/引用類型約束?
- 30. 如何使用泛型約束類型
如果我想檢查的第二種類型實際上是一個基類,這個封面會覆蓋嗎? T實際上是「MyObject」,但我將檢查MyObject繼承的「MyBase」。 – 2012-03-22 14:51:07
@ JamesP.Wright'typeof(MyBase).IsAssignableFrom(typeof(T))'應該返回true,如果'T'是'MyBase'的子類 – 2012-03-22 15:09:25