通过反射将Collection <T>转换为ObservableCollection <T>时出现InvalidCastException

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的类型来"解决"我的问题.

Tho*_*que 5

我可以投出Collection<T>一个ObservableCollection<T>这样的:

ObservableCollection<MyObject> col1;
col1 = (ObservableCollection<MyObject>)new Collection<MyObject>();
Run Code Online (Sandbox Code Playgroud)

不,你不能......这段代码也抛出了InvalidCastException.一个实例Collection<T>不是一个实例ObservableCollection<T>,并且没有转换Collection<T>ObservableCollection<T>.它以另一种方式工作:a ObservableCollection<T>是a Collection<T>,因为ObservableCollection<T>继承自Collection<T>.

所以它失败了,因为它在代码中失败了同样的原因......