0

リフレクションのものを扱っていますが、ObservableCollectionのリフレクトされたインスタンスに問題があります。つまり、次のコマンドで新しいインスタンスを作成する場合です。

Type virtualObservable = typeof(ObservableCollection<>);
object observable = virtualObservable.MakeGenericType(genericType)

オブジェクトを持っていますが、ObservableCollectionのように使用することはできません。それが必要です。

どんな手掛かり?

4

1 に答える 1

2

3つの可能性があります:

  1. genericTypeコンパイル時に既知の場合は、そのタイプをジェネリックパラメーターとして使用してMakeGenericTypeの戻り値をにキャストします。ObservableCollection<T>
  2. .NET 4.0を使用している場合は、 .dynamicではなくタイプを監視可能にしますobject
  3. observable必要なタイプにキャストします。つまり、CollectionChangedイベントに登録する場合は、にキャストしINotifyCollectionChangedます。それを繰り返したい場合は、にキャストしIEnumerableます。

最初のオプションは使用できないと思います。使用できれば、リフレクションのアプローチ全体が不要になるからです。2番目のアプローチでは、開発中にIntelliSenseのサポートがありません。オプション3が最適だと思います。

オプション3のサンプル:コレクションに新しいアイテムを追加する場合は、コレクションにキャストして、非ジェネリックメソッドを使用
する必要があります。ICollectionAdd

ICollection tmp = (ICollection)observable;
tmp.Add(yourObject);
于 2011-06-09T07:29:13.420 に答える