如何确定ParameterInfo是否为generics类型?
我有一个GenericMethodDefinition的MethodInfo
。 如: CallMethod(T arg, string arg2)
。 GetParameters()方法将为我提供两个ParameterInfo对象,第一个是通用的,第二个不是。 如何让ParameterInfo告诉我它是通用的? 如果有约束怎么办?
检查ParameterType.IsGenericParameter
。
您可能还想检查ContainsGenericParameters
,这对于像MyMethod
这样的东西都是正确的。 (即使List<>
不是通用参数)
如果IsGenericParameter
为true,您还可以调用GetGenericParameterConstraints()
来获取接口或基类型约束,并且可以检查GenericParameterAttributes
( [Flags]
枚举)是否有new()
, struct
或class
约束。
我想你正在寻找这些:
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
也许在这里你会找到有关反映通用参数的信息……