c# - 列表中的 foreach [C#]

标签 c# casting foreach polymorphism

MonoBehavior[] list; // This is from Unity3d but think of it as Object, 
                     // all classes inherit from it.

列表中充满了很多东西,有些是 Alpha,来自 Alpha 类,还有一些来自其他类。

foreach(Alpha a in list) // Alpha is a script. 
  a.doSomething();

我假设我的 foreach 会这样工作:在列表中找到的 Foreach Alpha 脚本做某事,忽略所有其他组件。

我认为这是一个转换问题。请帮助我更好地理解转换/多态性。

我在执行过程中遇到这个错误: 无法从源类型转换为目标类型

最佳答案

您在多态性方面的做法是错误的:虽然 Alpha 是派生类型,但您列表中类型 MonoBehavior 中的所有其他对象并非都是派生类型。因此,有些会导致 foreach 正在执行的隐式类型转换失败。 如果您的环境中可用,您可以使用“OfType()”扩展:

foreach(Alpha a in list.OfType<Alpha>())

关于c# - 列表中的 foreach [C#],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15431111/

相关文章:

checkbox - 获取转发器中所有复选框的值

c# - iTextSharp pdf 中缺少 Font Awesome 图标

c# - 为什么 .NET 中的通用 Dictionary 不提供 ForEach() 方法?

c# - 使用 CaSTLe 容器中的已注册组件为另一个组件提供依赖项

java - 在 Java 中转换接口(interface)

将多维数组转换为另一种类型的多维数组

c# - 实现接口(interface)但返回返回类型的子类?

php - 转换 Javascript 关联对象并在 PHP 中输​​出

c# - 如何找到转发器内的每个项目信息(在 ItemCommand 事件中) - 转发器数据源是一个 List<> 集合

c# - 将文件从 PC 复制到 Windows Mobile 设备的好方法是什么?