Невозможно преобразовать тип источника в тип назначения

Я пишу игру в Unity и пытаюсь использовать полиморфизм для доступа к 2 подклассам, но продолжаю получать сообщение об ошибке:

Невозможно преобразовать тип источника в тип назначения

У меня есть сериализованный список Places, и я пытаюсь преобразовать его в Property, который является подклассом Place. Как я могу сделать это в Unity?

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

person Celestrial    schedule 23.10.2015    source источник
comment
Возможный дубликат downcast и upcast   -  person rutter    schedule 23.10.2015
comment
Для того, что вы делаете в коде, приведение, вероятно, не нужно. Можете ли вы поделиться кодом и/или причиной приведения? Кроме того, на самом деле это не вопрос Unity, поэтому я собираюсь удалить этот тег и вместо этого пометить его как C#...   -  person Dan Puzey    schedule 23.10.2015


Ответы (1)


Если элементы в вашем списке типа Place изначально были созданы с использованием базового типа Place, то Я не думаю, что вы можете/должны приводить к понижению (или, скорее, выполнять преобразование типов) таким образом, по крайней мере, не на управляемом языке, таком как C#. Рассмотрите возможность изменения дизайна или создания экземпляров элементов типа Property при заполнении списка:

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

Затем позже вы можете привести их к типу Property, когда вам нужно их использовать:

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

Подробнее об этом можно прочитать в этом вопросе о переполнении стека. Надеюсь это поможет! Дайте знать, если у вас появятся вопросы.

person Serlite    schedule 23.10.2015
comment
Проблема в том, что элементы выпадают в редакторе. Хотя элементы относятся к типу Property, в коде нет места, где я их инстанцирую. Если бы это было сделано в коде с использованием ... new Property(), я думаю, все было бы в порядке, но поскольку я пытаюсь удалить динамическую доску из редактора, это невозможно сделать. Я думал, что перетаскивание типа свойства в редакторе будет эквивалентно, но это не так. - person Celestrial; 24.10.2015