Преобразование IList в IList

#c# #asp.net-mvc-3

#c# #asp.net-mvc-3

Вопрос:

Могу ли я преобразовать IList определенного класса модели в IList класса EntityObject в проекте MVC 3 .Net c #? Конкретный класс модели, если он определен как подкласс класса EntityObject . Когда я пытаюсь выполнить приведение, я получаю сообщение об ошибке:

Невозможно привести объект типа ‘System.Коллекции.Общий список 1[GesDis.Models.TiposCursosCEF]' to
type
'System.Collections.Generic.IList
1[System.Data.Objects.Классы данных.EntityObject]’ .»

Ответ №1:

Это случай совпадения. То есть, только потому B , что происходит от A , и вы можете назначить A a = new B() , это не значит, что вы можете назначить T<B> T<A> . Это всего лишь два разных общих типа, и назначение не работает.

Вместо этого вам нужно сделать что-то вроде этого:

 IList<EntityObject> entityObjects = modelObjects.Cast<EntityObject>().ToList();
  

Ответ №2:

Нет, если бы вы могли его использовать, вы могли бы сделать что-то подобное:

 class Base {}
class Derived : Base {}
class SomeOther : Base {}

var list = new List<Derived>();
var baseList = (IList<Base>)list;

baseList.Add(new SomeOther()); // oops, add SomeOther to a List<Derived>