通过使用反射,我试图找到从给定基类继承的类型集。用不了多长时间就可以找到简单类型,但是当涉及到泛型时,我就被难住了。
对于这段代码,第一个 IsAssignableFrom 返回 true,但是第二个返回 false。然而,最终的作业编译得很好。
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>();
}
}
那么,如何在运行时确定一个泛型类型定义是否从另一个泛型类型定义派生?