我有一个GenericMethodDefinition MethodInfo
。例如:CallMethod<T>(T arg, string arg2)
。 GetParameters()方法将为我提供两个ParameterInfo对象,第一个是通用的,第二个不是。如何让ParameterInfo告诉我它是通用的?如果它有约束怎么办?
答案 0 :(得分:7)
检查ParameterType.IsGenericParameter
。
您可能还想查看ContainsGenericParameters
,MyMethod<T>(List<T> param)
之类的内容也是如此。 (即使List<>
不是通用参数)
如果IsGenericParameter
为真,您也可以调用GetGenericParameterConstraints()
来获取接口或基类型约束,并且可以检查GenericParameterAttributes
([Flags]
枚举)以获取new()
1}},struct
或class
约束。
答案 1 :(得分:3)
我认为你正在寻找这些:
parameterInfo.ParameterType.ContainsGenericParameters
parameterInfo.ParameterType.GetGenericParameterConstraints()
答案 2 :(得分:2)
除了其他人对第二个问题的回答:是的,我们可以使用ParameterInfo
从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
答案 3 :(得分:1)
也许here 您会找到有关反映通用参数的信息......