复制对象列表以列出具有其他属性的继承类型的对象

时间:2014-02-12 15:19:49

标签: c# casting .net

我有一个类型为

的对象List1
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”。

我做错了什么?

3 个答案:

答案 0 :(得分:0)

简单地说,你不能。每个ClassName2都是ClassName1,但不是每个ClassName1都是ClassName2。这意味着您可以将ClassName2分配给ClassName1变量,但无法将ClassName1分配给ClassName2变量。而且由于你不能为一个变量做到这一点,你不能为列表,逆变或不做它。

答案 1 :(得分:0)

你可以这样做:

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

答案 2 :(得分:0)

施法是不可能的,因为你不能将父母施放给孩子,但你总是可以手动做:

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