我有一個DynamicObject
與實施的TryConvert
方法。下面的代碼工作得很好:當通過對象投射TryConvert時不會被調用
dynamic d = GetMyDynamic();
int i = (int)d; // TryConvert is called and returns the proper int value
然而,當d被轉換爲對象,轉換在運行時失敗:
object o = d;
int i = (int)o; // TryConvert is not called. InvalidCastException thrown
當然,(int)(dynamic)o
沒有工作,符合市場預期。
這是爲什麼?有什麼辦法可以解決這個問題嗎(int)o
會叫TryConvert
?
無賴。這意味着我的用戶需要投入動態(我正在動態創建動態代理,而我的用戶並沒有真正意識到他們)。 – zmbq
@zmbq:這根本不是動態問題。正如Vyacheslav Volkov在他的回答中所表明的那樣,如果您返回一個「普通」類型,該類型具有帶'object'作爲返回類型的方法的顯式轉換運算符,則會出現同樣的問題。根據您試圖達到的目標,有幾種不同的解決方案。也許你可以描述最終目標。 –
我創建了一個動態視圖模型,通過保留當前值的快照並定期掃描更改來自動觸發INotifyPropertyChanged事件。動態視圖模型爲每個屬性返回動態代理包裝器。用戶只會遇到IValueConverters中的代理 - 這是WPF將綁定對象傳遞迴用戶代碼的地方。我寧願不強迫我的用戶投入動態。雖然很容易不創建原始類型的代理(無論如何都沒有意義),但它不能解決100%的問題。 – zmbq