2009-07-16 14 views
4

Wie kann ich die follwing tun:Liste Kombination <Base> mit Liste <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); 
    } 
} 

Danke, Henk

Antwort

12

In C# 3.0/.NET 3.5, ist IEnumerable<T> nicht covariant. Dies würde jedoch wahrscheinlich in C# 4.0/.NET 4.0 funktionieren.

Vorerst Sie könnten (in .NET 3.5) verwenden:

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

(beachten Sie, dass Sie am Anfang der Datei "using System.Linq;" müssen)

Davor ... wahrscheinlich am einfachsten, nur um Schleife:

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

Ich möchte die kombinierte Liste durch einen Webservice an einen Client senden (mit jQuery), jetzt die Webservice-Methode gibt IEnumarable zurück, aber dann habe ich nie die Beschreibung Eigenschaft. Gibt es eine Möglichkeit, dies zu lösen? – Henk

1

Angenommen, Sie sind .net 3.5 verwenden, versuchen Sie die Elemente des derivedList wie folgt ergänzt:

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