Ответ 1
Вы можете создать список в качестве базового типа:
List<MyClass> myList = new List<MyClass>();
Затем вы можете добавить производные элементы в:
myList.Add(new MyClass2());
У меня есть абстрактный класс:
public abstract class MyClass
{
public abstract string nazwa
{
get;
}
}
И два класса, которые наследуются от MyClass:
public class MyClass1 : MyClass
{
public override string nazwa
{
get { return "aaa"; }
}
}
public class MyClass2 : MyClass
{
public override string nazwa
{
get { return "bbb"; }
}
}
В другом классе я создаю List:
List<MyClass> myList;
Теперь я хочу создать
myList = new List<MyClass1>;
В компиляторе отображается сообщение об ошибке:
Cannot implicitly convert type 'System.Collections.Generic.List<Program.MyClass1>' to 'System.Collections.Generic.List<Program.MyClass>'
У меня должен быть простой способ его преобразования... Я не могу найти ничего полезного
Вы можете создать список в качестве базового типа:
List<MyClass> myList = new List<MyClass>();
Затем вы можете добавить производные элементы в:
myList.Add(new MyClass2());
Неверно преобразовать a List<Derived>
в List<Base>
.
Что вы ожидаете, если напишете
List<MyClass1> derivedList = ...
List<MyClass> baseList = derivedList;
baseList.Add(new MyClass2()); //Boom!
Вы просите ковариацию; ковариация возможна только с интерфейсами только для чтения.
Таким образом, IEnumerable<Derived>
преобразуется в IEnumerable<Base>
.
У вас должен быть список базового класса, а позже вы можете использовать Linq для получения списка элементов MyClas1, когда вам это нужно.
List<MyClass> BaseList = new ...
BaseList.FillWithItems();
List<MyClass1> DerivedList = BaseList.OfType<MyClass1>().ToList();