我试图让所有类继承一个基类。
public void GetClassNames()
{
List<BaseClass> data = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(assembly => assembly.GetTypes())
.Where(type => type != null &&
type.IsSubclassOf(typeof(BaseClass))).ToList();
}
但是,上面的代码会引发错误
“无法隐式转换类型System.Collections.Generic.List<System.Type>' to
System.Collections.Generic.List”
如何将它转换为BaseClass类型?
答案 0 :(得分:4)
您正在选择所有类型的所有程序集,这些程序集是BaseClass
的子类。所以你得到所有类型但不是这些类型的实例。
你真的想要什么?方法名称为GetClassNames
,因此您可能需要:
public IEnumnerable<string> GetClassNames()
{
List<string> baseClassNames = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(assembly => assembly.GetTypes())
.Where(type => type?.IsSubclassOf(typeof(BaseClass)) == true)
.Select(type => type.FullName)
.ToList();
return baseClassNames;
}
如果您希望所有程序集中的所有类型都来自您的BaseClass
:
public IEnumnerable<Type> GetBaseClassSubTypesInCurrrentAssenblies()
{
List<Type> baseClassTypes = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(assembly => assembly.GetTypes())
.Where(type => type?.IsSubclassOf(typeof(BaseClass)) == true)
.ToList();
return baseClassTypes;
}