我正在处理反射的东西,我对ObservableCollection的反射实例有问题。我的意思是,如果用以下方法创建它的新实例:
Type virtualObservable = typeof(ObservableCollection<>);
object observable = virtualObservable.MakeGenericType(genericType)
我有一个对象,但我不能像ObservableCollection一样使用它,这就是我需要的。
有任何线索吗?
答案 0 :(得分:2)
有三种可能性:
genericType
,则使用该类型的通用参数将MakeGenericType
的返回值强制转换为ObservableCollection<T>
。dynamic
类型,而不是object
。observable
投射到您需要的类型,即如果您想注册CollectionChanged
事件,请将其投放到INotifyCollectionChanged
。如果要迭代它,请将其强制转换为IEnumerable
。我认为你不能使用第一个选项,因为如果可以的话,整个反射方法都是不必要的。第二种方法使您在开发过程中不支持IntelliSense。我认为选项3是最好的选择。
选项3的示例:
如果要向集合中添加新项,则需要将其强制转换为ICollection
并使用非通用Add
方法:
ICollection tmp = (ICollection)observable;
tmp.Add(yourObject);