I have a MethodInfo
of a GenericMethodDefinition. Such as: CallMethod<T>(T arg, string arg2)
. The GetParameters() method will give me two ParameterInfo objects, the first of which is generic, the second of which is not. How can I get ParameterInfo to tell me it is generic? What about if it has constraints?
How to determine if ParameterInfo is of generic type?
2.1k views Asked by smartcaveman At
4
There are 4 answers
0
On
In additional to others' answer to the second question: Yes we can get the constraints from ParameterInfo
using GetGenericParameterConstraints()
, but it doesn't work for all circumstances. Consider some generic method like this:
public static void MyMethod<T,V>() where T : Dictionary<int, int>
{
}
There is a constraint for this method, but the method doesn't have parameters(think about Enumerable.Cast). What I'm going to say is the constraint is not part of the parameters, but the method itself. We can get the constraints by:
method.GetGenericArguments()[0].BaseType //the constraint of T
method.GetGenericArguments()[1].BaseType //that of V: Object
Check
ParameterType.IsGenericParameter
.You may also want to check
ContainsGenericParameters
, which will be true for something likeMyMethod<T>(List<T> param)
. (Even thoughList<>
isn't a generic parameter)If
IsGenericParameter
is true, you can also callGetGenericParameterConstraints()
to get interface or base type constraints, and you can checkGenericParameterAttributes
(a[Flags]
enum) fornew()
,struct
, orclass
constraints.