使用ObservableCollection的反射实例

本文关键字:实例 反射 ObservableCollection 使用 | 更新日期: 2023-09-27 17:58:56

我正在处理反射填充,我遇到了ObservableCollection的反射实例的问题。我的意思是,如果用创建一个新的实例

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

我有一个对象,但我不能像ObservableCollection那样使用它,这正是我所需要的。

有线索吗?

使用ObservableCollection的反射实例

有三种可能性:

  1. 如果在编译时已知genericType,则使用的类型作为泛型参数,将MakeGenericType的返回值强制转换为ObservableCollection<T>
  2. 如果您在.NET 4.0上,请将类型dynamic设置为可观察,而不是object
  3. observable强制转换为所需的类型,即如果要注册CollectionChanged事件,请将其强制转换为INotifyCollectionChanged。如果要对其进行迭代,请将其强制转换为IEnumerable

我认为你不能使用第一个选项,因为如果可以的话,整个反思方法就没有必要了。第二种方法使您在开发时没有IntelliSense支持。我认为第三种选择是最好的。

选项3的示例:
如果要向集合中添加新项,则需要将其强制转换为ICollection并使用非通用Add方法:

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