Puede recorrer los parámetros genéricos con el tipo, y para cada parámetro, puede solicitar los tipos de restricciones.
Esto se hace usando:
Echa un vistazo a este código, que se puede ejecutar a través de LINQPad:
void Main()
{
Type type = typeof(TestClass<>);
foreach (var parm in type.GetGenericArguments())
{
Debug.WriteLine(parm.Name);
parm.GetGenericParameterConstraints().Dump();
}
}
public class TestClass<T>
where T : Stream
{
}
La salida es:
T
Type [] (1 item)
typeof (Stream)
encontrar otras limitaciones, tales como new()
, puede utilizar el enum de indicadores .GenericParameterAttributes
, ejemplo:
void Main()
{
Type type = typeof(TestClass<>);
foreach (var parm in type.GetGenericArguments())
{
Debug.WriteLine(parm.Name);
parm.GetGenericParameterConstraints().Dump();
parm.GenericParameterAttributes.Dump();
}
}
public class TestClass<T>
where T : new()
{
}
que da salida:
T
Type [] (1 item)
typeof (Stream)
DefaultConstructorConstraint
muchas gracias! ¡estupendo! –