2012-04-13 14 views
0

Angenommen, ich habe eine Klasse wie folgt aus:Erstellen Sie eine neue Liste mit Verweisen auf Elemente aus anderen Listen?

class Base { } 
class A : Base { } 
class B : Base { } 
class C : Base { } 

und Objekte wie folgt aus:

A a = new A(); 
List<B> bs = new List<B>(); 
List<C> cs = new List<C>(); 

Ist es möglich, eine neue Liste enthält Verweise auf die anderen Listen zu erstellen (So, dass Veränderungen spiegeln sich in die ursprünglichen Artikel wie:?

void modifyContents(List<Base> allItems) { 
    //modify them somehow where allItems contains a, bs and cs 
} 

Antwort

3

Sie können Elemente in den anderen Listen nicht hinzufügen/entfernen/ersetzen, sondern ändern Sie die ite ms in den anderen Listen.

List<Base> baseList = new List<Base>(); 
baseList.Add(a); 
baseList.AddRange(bs); 
baseList.AddRange(cs); 
// now you can modify the items in baseList 
2
  1. mit LINQ Concat() beide Listen kommen in den einzelnen IEnumerable<Base>
  2. dann durch Hindurchleiten in Konstruktor eine neue List<Base> Instanz erstellen trat zuvor eine

Probe

class Base 
{ 
    public string Id { get; set; } 
} 

List<B> bs = new List<B>() { new B() }; 
List<C> cs = new List<C> { new C(), new C() }; 
var common = new List<Base>(bs.OfType<Base>().Concat(cs.OfType<Base>())); 

// bs[0] will be updated 
common[0].Id = "1"; 

// cs[0] will be updated 
common[1].Id = "2"; 

// cs[1] will be updated 
common[2].Id = "3"; 
Verwandte Themen