如何将基类型列表转换为派生类型的列表

rob*_*rob 3 .net c# linq

从派生类到基类似乎有许多问题,但我的问题是如何将基类型列表转换为派生类型列表?

public class MyBase {
    public int A;
}

public class MyDerived : MyBase {
    public int B;
}

public void MyMethod() {
    List<MyBase> baseCollection = GetBaseCollection();
    List<MyDerived> derivedCollection = (List<MyDerived>)baseCollection; // Which doesn't work
}
Run Code Online (Sandbox Code Playgroud)

解决方案我最终得到的不是很优雅.

public class MyBase {
    public int A;
}

public class MyDerived {
    public int B;
    public MyBase BASE;
}
public void MyMethod() {
    List<MyBase> baseCollection = GetBaseCollection();
    List<MyDerived> derivedCollection = new List<MyDerived>();
    baseCollection.ForEach(x=>{
        derivedCollection.Add(new derivedCollection(){ BASE = x});
    });
}
Run Code Online (Sandbox Code Playgroud)

肯定有更好的办法...

Mar*_*lak 6

您可以使用Linq方法OfType<MyDerived>(),例如:

List<MyDerived> derivedCollection = baseCollection.OfType<MyDerived>().ToList();
Run Code Online (Sandbox Code Playgroud)

它将删除所有非MyDerived类的项目