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/