Наследование и ObservableCollection

Я разрабатываю приложение для Windows Phone 8.

У меня есть этот класс:

public class LocationToShow : ARItem

И эти две коллекции:

ObservableCollection<ARItem> arItems;
ObservableCollection<LocationToShow> locations;

Когда я делаю это:

arItems = locations;

Я получаю следующую ошибку:

Can't convert implicity the type ObservableCollection<LocationToShow> into the type ObservableCollection<ARItem>

Но если я сделаю это:

arItems = (ObservableCollection<ARItem>)locations;

Я получаю эту ошибку:

Can't convert the type ObservableCollection<LocationToShow> into the type ObservableCollection<ARItem>

Как решить эту проблему?


person VansFannel    schedule 08.03.2014    source источник


Ответы (2)


1) Вы можете использовать IEnumerable вместо ObservableCollection

IEnumerable<ARItem> arItems;
IEnumerable<LocationToShow> locations;
arItems = locations;

2) Пользовательский Cast<> Метод расширения

var tempCollection = locations.Cast<ARItem>();
arItems.Clear();
tempCollection.ToList().ForEach(li=>arItems.Add(li));
person Blablablaster    schedule 08.03.2014

Когда дело доходит до дженериков, вы не можете просто присвоить производный тип базовому типу. Почему? Этот ответ дает вескую причину, почему.

Чтобы назначить дженерики производного типа дженерикам базового типа, вы используете ковариацию.

Пытаться:

ObservableCollection<Derived> arItems = new ObservableCollection<Derived>();
IEnumerable<Base> locations = new ObservableCollection<Base>();
locations = arItems;
person Jan Navarro    schedule 08.03.2014