我可以将Collection<T>
投射到这样的ObservableCollection<T>
:
ObservableCollection<MyObject> col1;
col1 = (ObservableCollection<MyObject>)new Collection<MyObject>();
但是当我尝试通过反射做到这一点时,我得到以下错误:
myProperty.SetValue(
element,
Convert.ChangeType(values, myProperty.PropertyType, null)
, null);
类型&#39; System.InvalidCastException&#39;的第一次偶然异常。 发生在mscorlib.ni.dll中附加信息:对象必须 实施IConvertible。
为什么转换在正常运行时工作,但在使用反射时却不行?
修改
我最终解决了#39;我的问题是不使用Collection<T>
作为类型,而是直接使用myProperty.PropertyType
作为类型。
答案 0 :(得分:5)
我可以将
Collection<T>
投射到ObservableCollection<T>
之类的 这样:ObservableCollection<MyObject> col1; col1 = (ObservableCollection<MyObject>)new Collection<MyObject>();
不,你不能......这段代码也会引发InvalidCastException
。 Collection<T>
的实例不是ObservableCollection<T>
的实例,并且没有从Collection<T>
到ObservableCollection<T>
的转换。它以另一种方式工作:ObservableCollection<T>
是Collection<T>
,因为ObservableCollection<T>
继承自Collection<T>
。
因为代码失败的相同原因导致反射失败...