Pregunta

Tengo un MethodInfo de un GenericMethodDefinition. Tales como: CallMethod<T>(T arg, string arg2). Los getParameters () método me dará dos objetos ParameterInfo, el primero de los cuales es genérico, el segundo de los cuales no lo es. ¿Cómo puedo llegar a ParameterInfo me dicen que es genérico? ¿Qué hay de si tiene limitaciones?

¿Fue útil?

Solución

Comprobar ParameterType.IsGenericParameter.
También es posible que desee comprobar ContainsGenericParameters, que será cierto para algo así como MyMethod<T>(List<T> param). (A pesar de que List<> no es un parámetro genérico)

Si IsGenericParameter es cierto, también puede llamar para obtener GetGenericParameterConstraints() interfaz de tipo base o limitaciones, y se puede comprobar GenericParameterAttributes ([Flags] una enumeración) para new(), struct o limitaciones class.

Otros consejos

creo que busca los siguientes:

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

En adicional a la respuesta de otros a la segunda pregunta: ¿Sí se puede obtener de las limitaciones de ParameterInfo usando GetGenericParameterConstraints(), pero no funciona para todas las circunstancias. Considere algún método genérico de esta manera:

public static void MyMethod<T,V>() where T : Dictionary<int, int>
{
}

No es una limitación de este método, pero el método no tiene parámetros (piensa en Enumerable.Cast ). Lo que voy a decir es que la restricción no es parte de los parámetros, pero el método en sí. Podemos obtener las restricciones por:

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

aquí se encuentra información reflejando sobre parámetros genéricos ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top