我有抽象类:
public abstract class MyClass
{
public abstract string nazwa
{
get;
}
}
Run Code Online (Sandbox Code Playgroud)
还有两个继承自MyClass的类:
public class MyClass1 : MyClass
{
public override string nazwa
{
get { return "aaa"; }
}
}
public class MyClass2 : MyClass
{
public override string nazwa
{
get { return "bbb"; }
}
}
Run Code Online (Sandbox Code Playgroud)
在另一个类中,我创建了List:
List<MyClass> myList;
Run Code Online (Sandbox Code Playgroud)
现在我想创造
myList = new List<MyClass1>;
Run Code Online (Sandbox Code Playgroud)
编译器显示错误:
Cannot implicitly convert type 'System.Collections.Generic.List<Program.MyClass1>' to 'System.Collections.Generic.List<Program.MyClass>'
Run Code Online (Sandbox Code Playgroud)
我必须有一些简单的方法来转换它...我找不到任何有用的东西
SLa*_*aks 12
将a转换List<Derived>为a 是不安全的List<Base>.
如果你写的话,你期望发生什么?
List<MyClass1> derivedList = ...
List<MyClass> baseList = derivedList;
baseList.Add(new MyClass2()); //Boom!
Run Code Online (Sandbox Code Playgroud)
你要求协方差 ; 只有只读接口才能实现协方差.
因此,IEnumerable<Derived>可转换为IEnumerable<Base>.
您可以将列表创建为基本类型:
List<MyClass> myList = new List<MyClass>();
Run Code Online (Sandbox Code Playgroud)
然后,您可以将派生项添加到:
myList.Add(new MyClass2());
Run Code Online (Sandbox Code Playgroud)