使用ObservableCollection的反射实例
本文关键字:实例 反射 ObservableCollection 使用 | 更新日期: 2023-09-27 17:58:56
我正在处理反射填充,我遇到了ObservableCollection的反射实例的问题。我的意思是,如果用创建一个新的实例
Type virtualObservable = typeof(ObservableCollection<>);
object observable = virtualObservable.MakeGenericType(genericType)
我有一个对象,但我不能像ObservableCollection那样使用它,这正是我所需要的。
有线索吗?
有三种可能性:
- 如果在编译时已知
genericType
,则使用的类型作为泛型参数,将MakeGenericType
的返回值强制转换为ObservableCollection<T>
- 如果您在.NET 4.0上,请将类型
dynamic
设置为可观察,而不是object
- 将
observable
强制转换为所需的类型,即如果要注册CollectionChanged
事件,请将其强制转换为INotifyCollectionChanged
。如果要对其进行迭代,请将其强制转换为IEnumerable
我认为你不能使用第一个选项,因为如果可以的话,整个反思方法就没有必要了。第二种方法使您在开发时没有IntelliSense支持。我认为第三种选择是最好的。
选项3的示例:
如果要向集合中添加新项,则需要将其强制转换为ICollection
并使用非通用Add
方法:
ICollection tmp = (ICollection)observable;
tmp.Add(yourObject);