如果对象O继承自对象T,如何将List <o>转换为List <t>?

时间:2019-05-16 15:00:15

标签: c# generics inheritance poco

我有一个JSON响应,该响应取决于我无法直接修改的POCO C#对象。我需要向POCO对象中添加一些字段,然后将它们与可重复使用同一对象的应用程序的任何其他组件屏蔽。

由于我同时控制Web服务器和客户端(但不控制POCO对象本身),所以我的解决方案是从对象T派生,创建List<O>,然后将其转换为List<T>对于不希望在派生对象O中看到我添加的任何依赖项。

如果TO的父级,并且简单的转换不起作用,我应该如何从一个转换为另一个?

例如

public class Parent
{
  public string ParentString {get;set;}
}

public class Child : Parent
{
   public string ChildTempObject {get;set;}
}


public static DoStuff()
{
   List<Child> childList = new List<Child>
   //... get from webservice...
   return (List<Parent>)childList; // doesn't work
}

2 个答案:

答案 0 :(得分:2)

使用Enumerable.Cast<T>

List<Parent> parentList = childList.Cast<Parent>().ToList();

答案 1 :(得分:1)

您可以使用以下命令将数组的内容转换为父对象:

List<Parent> parentList = childList.ConvertAll(x => (Parent)x);