【问题标题】:Can not cast from source type to destination type无法从源类型转换为目标类型
【发布时间】:2016-01-23 04:09:58
【问题描述】:

我正在用 Unity 编写游戏,我正在尝试使用多态性来访问 2 个子类,但不断收到错误:

无法从源类型转换为目标类型

我有一个Places 的序列化列表,我正在尝试向下转换为Property,它是Place 的子类。我如何在 Unity 中做到这一点?

((Property)Board.GetBoardPlace(Players[PlayerTurn].Position)).Owner = Players[PlayerTurn];

【问题讨论】:

  • downcast and upcast的可能重复
  • 对于您在代码中所做的事情,演员阵容可能是不必要的。你能分享更多的代码和/或演员的原因吗?另外,这不是一个真正的 Unity 问题,所以我将删除该标签并将其标记为 C#...

标签: c# polymorphism downcast


【解决方案1】:

如果列表中类型为Place 的项目最初是使用基类型Place 实例化的,那么I don't think you can/should downcast (or rather, do type conversion) in this manner 至少不是使用像C# 这样的托管语言。在填充列表时考虑重新设计或实例化为 Property 类型的项目:

List<Place> Places = new List<Place>();
Places.Add(new Property());

然后,您可以在需要使用它们时将它们转换为Property

Property property = Places[0] as Property;
if (property != null){
    // Conversion successful
}

您可以在Stack Overflow question 中了解更多信息。希望这可以帮助!如果您有任何问题,请告诉我。

【讨论】:

  • 问题是项目被丢弃在编辑器中。尽管这些项目的类型是 Property,但我在代码中没有实例化它们的地方。如果它是在他的代码中使用 ... new Property() 我想我会没事的,但是因为我试图从编辑器中删除一个动态板,所以没有办法做到这一点。我认为在编辑器中拖动属性类型是等效的,但事实并非如此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
相关资源
最近更新 更多