2009-07-16 35 views
4

我該怎麼辦的follwing:結合列表<Base>與列表<Derived>

public class BaseItem 
{ 
    public string Title { get; set; } 
} 

public class DerivedItem : BaseItem 
{ 
    public string Description { get; set; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     List<BaseItem> baseList = new List<BaseItem>(); 
     List<DerivedItem> derivedList = new List<DerivedItem>(); 
     baseList.Add(new BaseItem() { Title = "tester"}); 
     derivedList.Add(new DerivedItem() { Title = "derivedTester", Description = "The Description" }); 

     baseList.AddRange(derivedList); 
    } 
} 

感謝, 亨克

回答

12

在C#3.0/.NET 3.5,IEnumerable<T>是不是協變。但是,這可能會在C#4.0/.NET 4.0中正常工作。

現在,你可以(在.NET 3.5)使用方法:

baseList.AddRange(derivedList.Cast<BaseItem>()); 

(請注意,你需要 「using System.Linq;」 在該文件的頂部)

在此之前...最簡單的可能只是循環:

foreach(BaseItem item in derivedList) {baseList.Add(item);} 
+0

我想通過webservice發送組合列表到客戶端(使用jQuery),現在webservice方法返回IEnumarable,但我從來沒有得到description屬性。有沒有辦法解決這個問題? – Henk 2009-07-16 10:09:14

1

假設你正在使用.NET 3.5,嘗試添加derivedList的項目是這樣的:

baseList.AddRange(derivedList.Cast<BaseItem>());