2011-06-09 51 views
0

我正在處理反射的東西,我遇到了ObservableCollection反射實例的問題。我的意思是,如果與創建它的一個新的實例:使用反射實例的ObservableCollection

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

我有一個對象,但我不能用它像一個的ObservableCollection,這就是我所需要的。

任何線索?

回答

2

有三種可能性:

  1. 如果genericType是在編譯時已知,使用該類型作爲泛型參數投MakeGenericType返回值的ObservableCollection<T>
  2. 如果您使用的是.NET 4.0,請使用類型dynamic而不是object
  3. observable轉換爲您需要的類型,即如果您想註冊CollectionChanged事件,請將其轉換爲INotifyCollectionChanged。如果你想迭代它,將它轉換爲IEnumerable

我認爲你不能使用第一個選項,因爲如果可以的話,整個反射方法將是不必要的。第二種方法讓你在開發過程中沒有IntelliSense支持。我認爲選項3是最好的。

樣品選項3:
如果你想一個新的項目添加到集合中,你需要將其轉換爲ICollection和使用非通用Add方法:

ICollection tmp = (ICollection)observable; 
tmp.Add(yourObject); 
+0

耶士,我不我想在編譯時知道類型。動態看起來很有趣,但我更傾向於投射界面。如果我想使用標準Add ()方法將元素添加到集合中,該怎麼辦? – Archedius 2011-06-09 07:39:26

+0

請參閱更新 – 2011-06-09 07:47:54