将List <base />与List <derived> </derived>组合在一起

时间:2009-07-16 09:30:28

标签: c#

我怎样才能做到这一点:

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);
    }
}

谢谢, 亨克

2 个答案:

答案 0 :(得分: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);}

答案 1 :(得分:1)

假设您正在使用.net 3.5,请尝试添加derivedList的项目,如下所示:

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