将 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 方法。注意:如果 curType
与 Component
的类型相同,这将报告错误。在这种情况下,您可能需要添加 Equals
检查。
if (curType.IsSubclassOf(typeof(Component)))
{
//Do stuff
}
无法进行类型转换,但正如您在评论中所说:
I need to create a list of all types
因此,制作 List<Type>
类型的组件列表,并将类型添加到该列表中。
您已经检查了它们是否已经从 Component 继承,因此只有那些类型会出现在该列表中。
我正在使用反射获得所需的 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 方法。注意:如果 curType
与 Component
的类型相同,这将报告错误。在这种情况下,您可能需要添加 Equals
检查。
if (curType.IsSubclassOf(typeof(Component)))
{
//Do stuff
}
无法进行类型转换,但正如您在评论中所说:
I need to create a list of all types
因此,制作 List<Type>
类型的组件列表,并将类型添加到该列表中。
您已经检查了它们是否已经从 Component 继承,因此只有那些类型会出现在该列表中。