我有一個GenericMethodDefinition的MethodInfo
。如:CallMethod<T>(T arg, string arg2)
。 GetParameters()方法會給我兩個ParameterInfo對象,其中第一個是通用的,第二個不是。我如何獲得ParameterInfo來告訴我它是通用的?如果它有限制呢?如何確定ParameterInfo是否屬於泛型?
7
A
回答
7
檢查ParameterType.IsGenericParameter
。
您可能還想檢查ContainsGenericParameters
,對於像MyMethod<T>(List<T> param)
這樣的情況,這將是正確的。 (即使List<>
不是泛型參數)
如果IsGenericParameter
是真實的,你也可以撥打GetGenericParameterConstraints()
獲得的接口或基類的限制,並且可以爲new()
,struct
或class
檢查GenericParameterAttributes
(一[Flags]
枚舉)限制。
+0
怎麼樣泛型參數的約束? – smartcaveman 2011-01-19 18:00:26
1
也許here您就會找到反映泛型參數信息...
3
我認爲你正在尋找這些:
parameterInfo.ParameterType.ContainsGenericParameters
parameterInfo.ParameterType.GetGenericParameterConstraints()
2
在附加別人的答案,第二個問題:是的,我們能使用GetGenericParameterConstraints()
從ParameterInfo
獲得約束,但它不適用於所有情況。考慮這樣一些通用的方法:
public static void MyMethod<T,V>() where T : Dictionary<int, int>
{
}
有這個方法的約束,但該方法沒有參數(想想Enumerable.Cast)。我要說的是約束不是參數的一部分,而是方法本身。我們可以得到由約束:
method.GetGenericArguments()[0].BaseType //the constraint of T
method.GetGenericArguments()[1].BaseType //that of V: Object
相關問題
- 1. 確定泛型類型是否相同
- 2. 確定KeyEvent是否屬於KEY_PRESSED類型
- 3. 如何確定屬性是否屬於基類或子類動態使用反射的泛型類型?
- 4. 如何判斷ParameterInfo類型是否是一個集合?
- 5. 確定類型是否是泛型類型的子類
- 6. 如何確定是否MPI進程屬於給定通訊
- 7. 如何確定是否類型是Golang
- 8. 這種泛型使用是否正確?
- 9. 確定是否類是與多個泛型參數
- 10. MapStruct - 如何指定屬性的泛型?
- 11. 泛型方法,確定型
- 12. 如何確定泛型的類?
- 13. 如何確定兩個對象在Swift中是否屬於同一類型
- 14. 如何確定類型是否爲RunTimeType?
- 15. 如何確定內存是否屬於堆或堆棧?
- 16. 是否有與anyInt(),anyString()等同的檢查參數是否屬於特定(非泛型)類型?
- 17. C#泛型 - 從使用泛型方法確定泛型
- 18. 如何在泛型中定義泛型?
- 19. 如何檢查泛型對象是否適用於字符串
- 20. 是否可以綁定嵌套泛型?
- 21. 如何檢查泛型類型定義是否繼承另一個泛型類型定義
- 22. 'null'是否屬於任何類型?
- 23. 如何確定java中沒有反射的泛型屬性的類類型?
- 24. 如何確定T是泛型中的值類型還是引用類?
- 25. 如何檢查服務方法的參數類型是否爲給定參數的ParameterInfo的輸出類型?
- 26. 如何測試某個類的實例是否是特定的泛型類型?
- 27. 是否使用泛型?
- 28. 是否可以將泛型重載限制爲屬性類型?
- 29. 指定屬於一小組類型的泛型參數
- 30. 確定泛型類實現類型
感謝MODS的創建信息參數標籤 – smartcaveman 2011-01-19 18:11:15