Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Combining List<Base> with List<Derived>

Tags:

c#

How can I do the follwing:

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

Thanks, Henk

like image 333
Henk Avatar asked Dec 13 '22 03:12

Henk


2 Answers

In C# 3.0/.NET 3.5, IEnumerable<T> is not covariant. However, this would probably work OK in C# 4.0/.NET 4.0.

For now, you could (in .NET 3.5) use:

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

(note that you'll need "using System.Linq;" at the top of the file)

Before that... probably easiest just to loop:

foreach(BaseItem item in derivedList) {baseList.Add(item);}
like image 198
Marc Gravell Avatar answered Feb 10 '23 17:02

Marc Gravell


Assuming you're using .net 3.5, try adding the items of the derivedList like this:

baseList.AddRange(derivedList.Cast<BaseItem>());
like image 41
lasseeskildsen Avatar answered Feb 10 '23 18:02

lasseeskildsen