将system.Type转换为用户定义的类型

时间:2017-08-18 11:15:32

标签: c# .net system.reflection

我试图让所有类继承一个基类。

  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类型?

1 个答案:

答案 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;
}