如何从子类型元素列表中派生父类型元素列表?

时间:2016-06-03 17:04:05

标签: c# list parent-child

我一直在寻找一段时间没有成功,如何从Child类型元素列表中派生父类型元素列表。 Parent类型包含持久数据,Child类型添加了一些我以后不需要的瞬态数据。

因此,我希望仅保留Parent类型的属性,并删除Child类型的其他属性,如下例所示:

public class MainPage
{

    public class Parent
    {
        public string ParentProperty;
    }
    public class Child : Parent
    {
        public string ChildProperty;
    }

    public static List<Child> listChild = new List<Child> {
        new Child { ParentProperty = "ABC", ChildProperty = "XYZ"},
        new Child { ParentProperty = "DEF", ChildProperty = "UVW"}
    };

    public void SomeFunction()
    {
        List<Parent> listParent = GetParentList(listChild);

        //listParent should contain 2 elements, each with only 1 property containing "ABC" and "DEF" respectively...
    }

    public List<Parent> GetParentList(List<Child> listchild)
    {
        return listchild.????????; //what should I include here ???
    }
}

像我return (listchild as List<Parent>);这样的所有尝试都给了我列表中的子元素,即使用ChildProperty“XYZ”和“UVW”,这使我的其余代码失败...

感谢您的想法!

1 个答案:

答案 0 :(得分:2)

这将使您的子实例表示为父引用:

public List<Parent> GetParentList(List<Child> listchild)
{
    return listchild.Cast<Parent>().ToList();
}

如果确实想要让Parent实例与子项具有相同的数据,则必须创建新实例并复制数据:

public List<Parent> GetParentList(List<Child> listchild)
{
    return listchild.Select(child => new Parent{ ParentProperty = child.ParentProperty }).ToList();
}