我有一个应用程序,其中包含许多需要添加到报表中的页面。页面数量增长很快,因此我希望能够动态地使用它们填充报表。下面的方法正确地返回页面列表,但是我无法将页面添加到报告中。
我得到参数1:无法从'System.Type'转换为'Reports.Pages.PageBase'如何更正此问题?
private void AddAllPages()
{
var pages = FindSubClassesOf<PageBase>();
foreach (var pg in pages)
{
Report.Pages.Add(pg);
}
}
public IEnumerable<Type> FindSubClassesOf<TBaseType>()
{
var baseType = typeof(TBaseType);
var assembly = baseType.Assembly;
return assembly.GetTypes().Where(t => t.IsSubclassOf(baseType));
}
答案 0 :(得分:0)
您想要创建每种类型的实例:
Activator.CreateInstance(type)
如果类型没有默认构造函数,则还需要传递构造函数参数。
答案 1 :(得分:0)
Discovering derived types using reflection
public static List<Type> FindAllDerivedTypes<T>()
{
return FindAllDerivedTypes<T>(Assembly.GetAssembly(typeof(T)));
}
public static List<Type> FindAllDerivedTypes<T>(Assembly assembly)
{
var derivedType = typeof(T);
return assembly
.GetTypes()
.Where(t =>
t != derivedType &&
derivedType.IsAssignableFrom(t)
).ToList();
}