我有一个类型为
的对象List1public class ClassName1
{
public ClassName1()
{
}
public short Prop1 { get; set; }
public string Prop2 { get; set; }
}
和类型为
的对象的空List2public class ClassName2: ClassName1
{
public double Prop3;
}
我想通过
将List1的内容复制到List2IList<ClassName2> List2 = List1.Cast<ClassName2>().ToList();
但我明白了:
'InvalidCastException未处理。无法将类型为“Namespace.ClassName1”的对象强制转换为“Namespace.ClassName2”。
我做错了什么?
答案 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})
}