使用 ObservableCollection 的反射实例
我正在处理反射的东西,我遇到了 ObservableCollection 的反射实例的问题。我的意思是,如果创建它的一个新实例:
Type virtualObservable = typeof(ObservableCollection<>);
object observable = virtualObservable.MakeGenericType(genericType)
我有一个对象,但我不能像 ObservableCollection 一样使用它,这就是我所需要的。
有什么线索吗?
I'm dealing with reflection stuffs, I've got a problem with a reflected instance of ObservableCollection. I mean, if create a new instance of it with:
Type virtualObservable = typeof(ObservableCollection<>);
object observable = virtualObservable.MakeGenericType(genericType)
I've got an object, but I can't use it like a ObservableCollection, that is what I need.
Any clue?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
存在三种可能性:
genericType
,则使用该类型将MakeGenericType
的返回值转换为ObservableCollection
作为通用参数。dynamic
类型,而不是object
类型。observable
转换为您需要的类型,即,如果您想注册CollectionChanged
事件,请将其转换为INotifyCollectionChanged
。如果您想迭代它,请将其转换为IEnumerable
。我认为你不能使用第一个选项,因为如果可以,整个反射方法就没有必要了。第二种方法使您在开发时得不到 IntelliSense 支持。我认为选项 3 是最好的。
选项 3 的示例:
如果要向集合中添加新项目,则需要将其强制转换为 ICollection 并使用非泛型 Add 方法:
There are three possibilities:
genericType
is known at compile time, cast the return value ofMakeGenericType
to anObservableCollection<T>
using that type of as the generic parameter.dynamic
, notobject
.observable
to the type you need, i.e. if you want to register for theCollectionChanged
event, cast it toINotifyCollectionChanged
. If you want to iterate over it, cast it toIEnumerable
.I think you can't use the first option, because if you could, the whole reflection approach would be unnecessary. The second approach leaves you with no IntelliSense support while developing. I think option 3 is the best one.
Sample for option 3:
If you want to add a new item to the collection, you need to cast it to
ICollection
and use the non-genericAdd
method: