Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 铸造系统。键入特定类别_C#_Oop_Reflection_Casting - Fatal编程技术网

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请参考帕特里克回答下面我的评论。这是一个完全不同的工作,如果你不知道它在做什么,可能会引起麻烦。我刚刚读到,是的,你是对的。忽略了这一部分(这就是你在消化午餐时评论的结果)