2014-02-12 55 views
0

我有一個列表1類型的對象複製列表中列出

public class ClassName1 
{ 

    public ClassName1() 
    { 
    } 

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

} 

和一個空的列表2類型的對象繼承類型的具有附加屬性的對象

public class ClassName2: ClassName1 
{ 
    public double Prop3; 
} 

我想通過做

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

到列表1到列表2中的內容複製,但我得到:

'InvalidCastException未處理。無法投射'Namespace.ClassName1'類型的對象以鍵入'Namespace.ClassName2'。

我在做什麼錯?

+0

ClassName2從inherites ClassName1,而不是其他方式,所以您只能從2投射到1 –

+0

您不能將父項轉換爲子項,反之亦然。並非每一隻動物都是一隻狗,但每隻狗都是一隻動物。或者,如果父母實際上是一個「隱藏」的孩子:「動物a =新狗()」 –

回答

0

簡而言之,你不能。每ClassName2ClassName1,但不是每個ClassName1ClassName2。這意味着您可以將ClassName2分配給ClassName1變量,但您不能將ClassName1分配給ClassName2變量。既然你不能爲單個變量做這件事,你不能爲一個列表做,反轉或不變。

0

你可以做這樣的事情,而不是:

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

演員是不可能的,因爲你不能投了父母的孩子,但你總是可以做手工:

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