2016-05-09 13 views
1

die folgende Struktur betrachtenGenerisches Sammlung Polymorphismus Typ als Parameter

class A {} 
class B : A {} 
class C : A {} 
class D : A {} 
... 

// in data source class 
BindingList<B> d1; 
BindingList<C> d2; 
BindingList<D> d3; 
... 

// in datagridview class 
void BindDataSource(BindingList<A> source); 
void QueryDataSource() { 
    BindingList<A> source = (BindingList<A>)dgv.DataSource; 
    A a = source.First(...); 
} 

Ich möchte d1 und d2 binden ... zu einem DataGridView durch BindDataSource sot dass jede Änderung d1 und d2 automatisch in widerspiegeln DataGridView. Von this post habe ich erfahren, dass der obige Code nicht gültig ist. Aber keine der Lösungen in diesem Post trifft auf meine Situation zu. Ich habe versucht, BindDataSource die folgenden

void BindingDataSource<T>(BindingList<T> source) where T:A; 

zu ändern, aber jetzt QueryDataSource nicht kompilieren, da ich nicht die Datasource werfen kann. Gibt es eine Möglichkeit, das Ganze zu lösen?

+1

wenn Sie nur Abfragen LINQ verwenden, pro Ihrem Beispiel, warum dann nicht werfen Sie Ihre 'DataSource' zu' IEnumerable '(verknüpften Frage legt dies nahe). 'IEnumerable ' ist Co-Variante, alle 3 Ihrer Listen sind 'IEnumerable ' .. –

Antwort

Verwandte Themen