如何确定ParameterInfo是否为generics类型?

我有一个GenericMethodDefinition的MethodInfo 。 如: CallMethod(T arg, string arg2) 。 GetParameters()方法将为我提供两个ParameterInfo对象,第一个是通用的,第二个不是。 如何让ParameterInfo告诉我它是通用的? 如果有约束怎么办?

检查ParameterType.IsGenericParameter
您可能还想检查ContainsGenericParameters ,这对于像MyMethod(List param)这样的东西都是正确的。 (即使List<>不是通用参数)

如果IsGenericParameter为true,您还可以调用GetGenericParameterConstraints()来获取接口或基类型约束,并且可以检查GenericParameterAttributes[Flags]枚举)是否有new()structclass约束。

我想你正在寻找这些:

 parameterInfo.ParameterType.ContainsGenericParameters parameterInfo.ParameterType.GetGenericParameterConstraints() 

除了其他人对第二个问题的回答:是的,我们可以使用GetGenericParameterConstraints()ParameterInfo获取约束,但它并不适用于所有情况。 考虑一下像这样的通用方法:

 public static void MyMethod() where T : Dictionary { } 

此方法存在约束,但该方法没有参数(请考虑Enumerable.Cast )。 我要说的是约束不是参数的一部分,而是方法本身。 我们可以通过以下方式获得约束

 method.GetGenericArguments()[0].BaseType //the constraint of T method.GetGenericArguments()[1].BaseType //that of V: Object 

也许在这里你会找到有关反映通用参数的信息……