0

我正在处理反射的东西,我遇到了 ObservableCollection 的反射实例的问题。我的意思是,如果使用以下命令创建它的新实例:

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

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

有什么线索吗?

4

1 回答 1

2

有三种可能:

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

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

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

ICollection tmp = (ICollection)observable;
tmp.Add(yourObject);
于 2011-06-09T07:29:13.420 回答