我有抽象类:
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>'
我必须有一些简单的方法来转换它...我找不到任何有用的东西
答案 0 :(得分:11)
将List<Derived>
转换为List<Base>
如果你写
,你会发生什么?List<MyClass1> derivedList = ...
List<MyClass> baseList = derivedList;
baseList.Add(new MyClass2()); //Boom!
你要求协方差;只有只读接口才能实现协方差
因此,IEnumerable<Derived>
可转换为IEnumerable<Base>
。
答案 1 :(得分:9)
您可以将列表创建为基本类型:
List<MyClass> myList = new List<MyClass>();
然后您可以将派生项添加到:
myList.Add(new MyClass2());
答案 2 :(得分:1)
您必须拥有基类列表,稍后您可以在需要时使用Linq获取MyClas1项目列表。
List<MyClass> BaseList = new ...
BaseList.FillWithItems();
List<MyClass1> DerivedList = BaseList.OfType<MyClass1>().ToList();