C# 铸造系统。键入特定类别
我得到了想要的系统。使用反射输入。我需要检查它是否是组件类的后代。如果是,我需要将这个特殊的类添加到列表中。转换类型的正确方法是什么C# 铸造系统。键入特定类别,c#,oop,reflection,casting,C#,Oop,Reflection,Casting,我得到了想要的系统。使用反射输入。我需要检查它是否是组件类的后代。如果是,我需要将这个特殊的类添加到列表中。转换类型的正确方法是什么 foreach (Type curType in allTypes) { if (curType descends from Component) componentsList.Add( (Component)curType ); } 您可以使用: 尽管如此,Type仍然是一个类型,而不是一个实例,因此如果您想将实例添加到列表
foreach (Type curType in allTypes)
{
if (curType descends from Component)
componentsList.Add( (Component)curType );
}
您可以使用:
尽管如此,Type
仍然是一个类型,而不是一个实例,因此如果您想将实例添加到列表中,您应该检查实例,而不是类型
如果有实例,最好使用is
:
if (instance is Component)
{ }
如果要创建特定类型的新实例,请使用:
您可以使用:
尽管如此,Type
仍然是一个类型,而不是一个实例,因此如果您想将实例添加到列表中,您应该检查实例,而不是类型
如果有实例,最好使用is
:
if (instance is Component)
{ }
如果要创建特定类型的新实例,请使用:
你在寻找方法。注意:如果curType
与组件的类型相同,则此报告为false。在这种情况下,您可能需要添加Equals
check
if (curType.IsSubclassOf(typeof(Component)))
{
//Do stuff
}
你在寻找方法。注意:如果curType
与组件的类型相同,则此报告为false。在这种情况下,您可能需要添加Equals
check
if (curType.IsSubclassOf(typeof(Component)))
{
//Do stuff
}
类型转换是不可能的,但正如您在评论中所说:
我需要创建一个所有类型的列表
因此,将您的组件列表设置为类型List
,并将类型添加到该列表中
您已经检查了它们是否已经从组件继承,因此只有这些类型才会出现在该列表中。类型转换是不可能的,但正如您在注释中所说:
我需要创建一个所有类型的列表
因此,将您的组件列表设置为类型List
,并将类型添加到该列表中
您已经检查了它们是否已经从组件继承,因此只有这些类型才会出现在该列表中。您不能将curType强制转换为组件。您需要创建它的一个实例。Activator.CreateInstance是您的朋友。您想要解决的问题还不完全清楚。您不能按规定转换类型,为什么要向列表中添加class
?或者在列表中有您想要的特定实例吗?我需要创建一个实现特定接口的所有类型的列表,这些类型也是组件的后代。此列表稍后将用于查找该特定类型的实例。那么为什么不将该类型添加到列表中?@Stephen我收到一个错误-参数类型“System.type”不能分配给参数类型“Component”。您不能将curType强制转换为Component。您需要创建它的一个实例。Activator.CreateInstance是您的朋友。您想要解决的问题还不完全清楚。如上所述,您无法强制转换类型,为什么要将类添加到列表中?或者在列表中有您想要的特定实例吗?我需要创建一个实现特定接口的所有类型的列表,这些类型也是组件的后代。此列表稍后将用于查找该特定类型的实例。那么,为什么不将该类型添加到列表中?@Stephen我得到一个错误-参数类型“System.type”不能分配给参数类型“Component”。IsAssignableFrom
正在执行另一项工作。如果类型是给定类型的后代,则检查赋值兼容性。由于协方差,这将为IEnumerable
报告真值,但不是实际派生的。IsAssignableFrom
正在执行不同的工作。如果类型是给定类型的后代,则检查赋值兼容性。由于协方差的原因,这将对IEnumerable
报告为真,但不是实际推导出来的。这就是为什么他最好使用IsAssignableFrom
,正如帕特里克·霍夫曼的回答所述,如果这确实是他试图解决的问题的话solve@Stephen请参考帕特里克回答下面我的评论。这是一个完全不同的工作,如果你不知道它在做什么,可能会引起麻烦。我刚刚读到,是的,你是对的。忽略了这一部分(这是你在消化午餐时评论得到的),这就是为什么他最好使用IsAssignableFrom
,正如帕特里克·霍夫曼在回答中所说的,如果这确实是他试图解决的问题的话solve@Stephen请参考帕特里克回答下面我的评论。这是一个完全不同的工作,如果你不知道它在做什么,可能会引起麻烦。我刚刚读到,是的,你是对的。忽略了这一部分(这就是你在消化午餐时评论的结果)