Ben*_*ele 0 c# reflection windows-phone-8.1
我可以投出Collection<T>
一个ObservableCollection<T>
这样的:
ObservableCollection<MyObject> col1;
col1 = (ObservableCollection<MyObject>)new Collection<MyObject>();
Run Code Online (Sandbox Code Playgroud)
但是当我尝试通过反射做到这一点时,我得到以下错误:
myProperty.SetValue(
element,
Convert.ChangeType(values, myProperty.PropertyType, null)
, null);
Run Code Online (Sandbox Code Playgroud)
mscorlib.ni.dll中出现"System.InvalidCastException"类型的第一次机会异常附加信息:对象必须实现IConvertible.
为什么转换在正常运行时工作,但在使用反射时却不行?
编辑
我最后通过不使用Collection<T>
作为类型但直接使用我myProperty.PropertyType
的类型来"解决"我的问题.
我可以投出
Collection<T>
一个ObservableCollection<T>
这样的:Run Code Online (Sandbox Code Playgroud)ObservableCollection<MyObject> col1; col1 = (ObservableCollection<MyObject>)new Collection<MyObject>();
不,你不能......这段代码也抛出了InvalidCastException
.一个实例Collection<T>
不是一个实例ObservableCollection<T>
,并且没有转换Collection<T>
为ObservableCollection<T>
.它以另一种方式工作:a ObservableCollection<T>
是a Collection<T>
,因为ObservableCollection<T>
继承自Collection<T>
.
所以它失败了,因为它在代码中失败了同样的原因......
归档时间: |
|
查看次数: |
574 次 |
最近记录: |