Usando la reflexión, intento encontrar el conjunto de tipos que heredan de una clase base determinada. No pasó mucho tiempo para descubrir tipos simples, pero estoy perplejo cuando se trata de genéricos.Uso de IsAssignableFrom con tipos genéricos 'abiertos'
Para este fragmento de código, el primer IsAssignableFrom devuelve verdadero, pero el segundo devuelve falso. Y, sin embargo, la tarea final compila muy bien.
class class1 { }
class class2 : class1 { }
class generic1<T> { }
class generic2<T> : generic1<T> { }
class Program
{
static void Main(string[] args)
{
Type c1 = typeof(class1);
Type c2 = typeof(class2);
Console.WriteLine("c1.IsAssignableFrom(c2): {0}", c1.IsAssignableFrom(c2));
Type g1 = typeof(generic1<>);
Type g2 = typeof(generic2<>);
Console.WriteLine("g1.IsAssignableFrom(g2): {0}", g1.IsAssignableFrom(g2));
generic1<class1> cc = new generic2<class1>();
}
}
Entonces, ¿cómo puedo determinar en tiempo de ejecución si una definición de tipo genérico se deriva de otra?
la asignación final sólo implica 'gen ric2' ... –
posible duplicado de [Cómo detectar si el tipo es otro tipo genérico] (http://stackoverflow.com/questions/74616/how-to-detect-if-type-is-another-generic-type) –
@Daniel Hilgarth - ¡Gracias! Me perdí eso cuando estaba limpiando el código de muestra antes de publicarlo. Todavía se compila cuando la asignación es genérica1 cc = new generic2 (); –
ThatBlairGuy