繁体   English   中英

将对象列表复制到具有其他属性的继承类型的对象列表中

[英]Copying list of objects to list objects of inherited type having additional properties

我有一个对象列表1

public class ClassName1
{

    public ClassName1()
    {
    }

    public short Prop1 { get; set; }
    public string Prop2 { get; set; }

}

和一个空的List2用于类型的对象

public class ClassName2: ClassName1
{
    public double Prop3;
}

我想通过执行以下操作将List1的内容复制到List2

IList<ClassName2> List2 = List1.Cast<ClassName2>().ToList();

但是我得到:

'InvalidCastException未处理。 无法将类型为“ Namespace.ClassName1”的对象转换为类型为“ Namespace.ClassName2”的对象。

我究竟做错了什么?

简而言之,你不能。 每个ClassName2都是一个ClassName1 ,但不是每个ClassName1都是一个ClassName2 这意味着您可以将ClassName2分配给ClassName1变量,但是不能将ClassName1分配给ClassName2变量。 而且由于您不能对单个变量执行此操作,因此您也不能针对列表(无论是否存在反变量)执行操作。

您可以改为执行以下操作:

IList<ClassName2> List2 = l1.Select(x => new ClassName2 { Prop1 = x.Prop1, Prop2 = x.Prop2 }).ToList();

投射是不可能的,因为您不能将父母投射为孩子,但是您始终可以手动进行:

foreach(var item in list1)
{
   List2.Add(new ClassName2{Prop1 = item.Prop1, Prop2 = item.Prop2, Prop3 = 0})
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM