1
は、私がd1
とd2
への変更が自動的に反映されますDataGridView
BindDataSource
てSOTに... d1
とd2
をバインドしたいのですが、以下の構造ジェネリックコレクションの多型のタイプパラメータとして
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(...);
}
を考えますDataGridView
。 this postから、私は上記のコードが有効ではないことを知りました。しかし、そのポストの解決策のどれも私の状況に当てはまりません。私は、次の
void BindingDataSource<T>(BindingList<T> source) where T:A;
にBindDataSource
を変更しようとしましたが、私はDataSourceをキャストすることはできませんようになりましたQueryDataSource
はコンパイルされません。全体を解決する方法はありますか?
あなただけのLINQを使用してクエリを実行している場合は、あなたの一例につき、なぜ 'IEnumerableを'(あなたのリンクの質問は、このことを示唆している)に、あなたの 'DataSource'をキャストしていません。 'IEnumerable'は共変種であり、あなたのリストの3つはすべて 'IEnumerable 'です。 –