将List<Base>与List<Derived>合并

4
我该如何做以下事情:
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);
    }
}

谢谢,Henk。
2个回答

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

我想通过一个Web服务(使用jQuery)将组合列表发送给客户端,现在Web服务方法返回IEnumarable,但是我从未得到描述属性。有解决方法吗? - Henk

1

假设您正在使用 .net 3.5,请尝试像这样添加 derivedList 的项目:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接