2014-11-08 34 views
0

鑄造集合 到一個ObservableCollection 時,我可以投一個 Collection<T>ObservableCollection<T>這樣的: InvalidCastException的通過反射

ObservableCollection<MyObject> col1; 
col1 = (ObservableCollection<MyObject>)new Collection<MyObject>(); 

但是當我嘗試通過反射我收到以下錯誤做到這一點:

myProperty.SetValue(
    element, 
    Convert.ChangeType(values, myProperty.PropertyType, null) 
    , null); 

A first chance exception of type 'System.InvalidCastException' occurred in mscorlib.ni.dll Additional information: Object must implement IConvertible.

爲什麼在正常運行時的轉換工作,而不是當我使用反射?

編輯 我結束了「解決」通過不使用Collection<T>作爲一種類型,而是直接使用我myProperty.PropertyType類型我的問題。

回答

5

I can cast a Collection<T> to an ObservableCollection<T> like this:

ObservableCollection<MyObject> col1; 
col1 = (ObservableCollection<MyObject>)new Collection<MyObject>(); 

不,你不能...這段代碼也會拋出一個InvalidCastExceptionCollection<T>的實例不是ObservableCollection<T>的實例,並且沒有從Collection<T>ObservableCollection<T>的轉換。它以另一種方式工作:ObservableCollection<T>Collection<T>,因爲ObservableCollection<T>繼承自Collection<T>

所以它以反射爲失敗的代碼相同的原因失敗...

+0

該死的這是令人尷尬的。我有一個編譯器錯誤沒有演員,並錯誤地認爲它會投的很好。 – 2014-11-08 16:24:11