Tengo un MethodInfo
de una GenericMethodDefinition. Tales como: CallMethod<T>(T arg, string arg2)
. El método GetParameters() me dará dos objetos ParameterInfo, el primero de los cuales es genérico, el segundo de los cuales no. ¿Cómo puedo obtener que ParameterInfo me diga que es genérico? ¿Qué pasa si tiene restricciones?¿Cómo se determina si ParameterInfo es de tipo genérico?
Respuesta
Compruebe ParameterType.IsGenericParameter
.
Es posible que también desee comprobar ContainsGenericParameters
, que será cierto para algo 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
(una enumeración [Flags]
) para new()
, struct
, o class
restricciones
¿qué pasa con las limitaciones de parámetros genéricos? – smartcaveman
En caso de que 'args' sea una matriz de' T [] ', se pueden usar' ParameterType.IsArray' y 'ParameterType.ContainsGenericParameter'. – user492238
Tal here encontrará información sobre que reflejan los parámetros genéricos ...
creo que busca estas:
parameterInfo.ParameterType.ContainsGenericParameters
parameterInfo.ParameterType.GetGenericParameterConstraints()
En adicional a la respuesta de otros a la segunda pregunta: ¿Sí se puede consiga las restricciones 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>
{
}
hay una restricción para este método, pero el método no tiene parámetros (pensar Enumerable.Cast). Lo que voy a decir es que la restricción no es parte de los parámetros, sino el método en sí mismo. Podemos obtener las restricciones por:
method.GetGenericArguments()[0].BaseType //the constraint of T
method.GetGenericArguments()[1].BaseType //that of V: Object
- 1. ¿Cómo se determina la clase de un tipo genérico?
- 2. Cómo detectar si el tipo es otro tipo genérico
- 3. ¿Cómo verificar si un parámetro de tipo genérico es anulable?
- 4. .NET Reflection - Cómo obtener el tipo "real" de fuera ParameterInfo
- 5. ¿Cómo se determina si la referencia del objeto es nula?
- 6. Comprobando si el objeto es de tipo genérico en C#
- 7. ¿Cómo se determina si CKEditor está cargado?
- 8. ¿Cómo detectar si un objeto es de tipo genérico Listar y convertir al tipo requerido?
- 9. C# HttpWebRequest - ¿Cómo se determina si se realizó HTTP 301?
- 10. ¿Cómo se determina si un tipo determinado (System.Type) hereda de una clase base específica (en .Net)?
- 11. ¿Cómo se determina si dos nodos están conectados?
- 12. ¿Cómo determinar si T es un tipo de valor o una clase de referencia en genérico?
- 13. ¿Cómo se determina si una lista bidimensional contiene un valor?
- 14. ¿Cómo puedo determinar si un método es un ejemplo genérico de un método genérico
- 15. ¿Cómo se determina quién emitió la señal?
- 16. Conversión de tipo genérico
- 17. ¿Cómo comprobar si un tipo T de un método genérico es IEnumerable <> y repetirlo?
- 18. ¿Determina si una lista de Python es el 95% igual?
- 19. ¿Se puede especificar en una restricción de tipo genérico que debe implementar un tipo genérico?
- 20. ¿Determina si una cadena es un selector jQuery válido?
- 21. ¿Cómo se determina programáticamente si una computadora con Windows es miembro de un dominio?
- 22. ¿Cómo se determina si un instalador de WiX es silencioso o interactivo?
- 23. ¿Cómo se determina el uso de stat() si un archivo es un enlace simbólico?
- 24. ¿Cuál es la diferencia entre un tipo genérico y una definición de tipo genérico?
- 25. Cómo declarar una restricción genérica que es un tipo genérico
- 26. Java argumentos de tipo genérico
- 27. ¿Determina si LTE está encendido?
- 28. Crear instancia de tipo genérico?
- 29. Tipo genérico y rendimiento
- 30. ¿Cómo se determina si una dirección IP es privada en Python?
gracias a los mods para la creación de la etiqueta ParameterInfo – smartcaveman