将 System.Type 转换为特定的 class

Casting System.Type to a specific class

我正在使用反射获得所需的 System.Type。我需要检查它是否是组件 class 的后代。如果是,我需要将这个特定的 class 添加到列表中。类型转换的正确方法是什么?

  foreach (Type curType in allTypes)
  {
     if (curType descends from Component)
       componentsList.Add( (Component)curType );
  }

您可以使用 IsSubClassOf:

if (typeof(Component).Equals(curType) || curType.IsSubClassOf(typeof(Component)))
{ }

尽管如此,Type 仍然是一个 类型 ,而不是一个 实例 ,所以如果你想添加实例到列表中,您应该检查实例,而不是类型。

如果你有一个实例,你最好使用is:

if (instance is Component)
{ }

如果您打算创建特定类型的新实例,请使用 Activator.CreateInstance:

object instance = Activator.CreateInstance(curType);

您正在寻找 IsSubClassOf 方法。注意:如果 curTypeComponent 的类型相同,这将报告错误。在这种情况下,您可能需要添加 Equals 检查。

if (curType.IsSubclassOf(typeof(Component)))
{
    //Do stuff
}

无法进行类型转换,但正如您在评论中所说:

I need to create a list of all types

因此,制作 List<Type> 类型的组件列表,并将类型添加到该列表中。

您已经检查了它们是否已经从 Component 继承,因此只有那些类型会出现在该列表中。