使用ObservableCollection的反射实例

时间:2011-06-09 07:22:10

标签: c# .net reflection runtime activator

我正在处理反射的东西,我对ObservableCollection的反射实例有问题。我的意思是,如果用以下方法创建它的新实例:

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

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

有任何线索吗?

1 个答案:

答案 0 :(得分:2)

有三种可能性:

  1. 如果在编译时知道genericType,则使用该类型的通用参数将MakeGenericType的返回值强制转换为ObservableCollection<T>
  2. 如果您使用的是.NET 4.0,请观察dynamic类型,而不是object
  3. observable投射到您需要的类型,即如果您想注册CollectionChanged事件,请将其投放到INotifyCollectionChanged。如果要迭代它,请将其强制转换为IEnumerable
  4. 我认为你不能使用第一个选项,因为如果可以的话,整个反射方法都是不必要的。第二种方法使您在开发过程中不支持IntelliSense。我认为选项3是最好的选择。

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

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