我有MethodInfo
一个 GenericMethodDefinition。如:CallMethod<T>(T arg, string arg2)
。GetParameters() 方法将给我两个 ParameterInfo 对象,第一个是通用的,第二个不是。我怎样才能让 ParameterInfo 告诉我它是通用的?如果有约束怎么办?
问问题
1741 次
4 回答
7
检查ParameterType.IsGenericParameter
。
您可能还想检查一下ContainsGenericParameters
,这对于类似MyMethod<T>(List<T> param)
. (即使List<>
不是通用参数)
如果IsGenericParameter
为真,您还可以调用GetGenericParameterConstraints()
获取接口或基类型约束,并且可以检查GenericParameterAttributes
([Flags]
枚举)是否存在new()
、struct
或class
约束。
于 2011-01-19T17:59:14.643 回答
3
我想你正在寻找这些:
parameterInfo.ParameterType.ContainsGenericParameters
parameterInfo.ParameterType.GetGenericParameterConstraints()
于 2011-01-19T18:00:51.487 回答
2
除了其他人对第二个问题的回答:是的,我们可以从ParameterInfo
using中获得约束GetGenericParameterConstraints()
,但它并不适用于所有情况。考虑一些像这样的通用方法:
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
于 2011-01-19T18:21:17.617 回答
1
也许在这里您会找到有关反映泛型参数的信息...
于 2011-01-19T18:00:42.630 回答