我想在運行時使用反射來比較兩個值。我爲此使用了Comparer.Default.Compare(x,y),但我意識到這是不夠的。假設我想比較一個double(1.0 == 10)。 Comparer.Default會拋出一個異常,因爲它堅持這兩個值必須是相同的類型(double)。然而,這個存在明確的轉換,這真的是我想要使用的。使用反射的比較運算符
那麼,爲什麼我不能只使用Convert.ChangeType?以1.25> 1(double> integer)的情況。如果我嘗試1.25上的Convert.ChangeType(1.25,typeof(int)),我會得到1,並且上面的斷言將失敗,當真正的1.25 IS> 1時。
那麼,有人可以請建議一種調用顯式比較(如果存在)類型定義?
謝謝。
不錯的選擇!我總是忘記爲此使用動態。 – 2010-09-21 15:37:38
我可以用表情樹做這個嗎? (.NET 2.0 + DLR是我的選擇,但4.0不是)我試圖發射一個快速調用,執行基本拉姆達比較Expression.Convert(Expression.Parameter(typeof(single)),typeof(double))在我的單個值上,但是在執行時失敗並且在執行時(無法編譯時)無效。我本來可以做錯的事情,因爲我只花了大約5分鐘的時間嘗試這個,然後不得不吃完午飯...... – Jeff 2010-09-21 21:17:40
@ JeffN825:我認爲你需要爲自己制定正確的轉換。這不會很有趣。 – 2010-09-21 22:25:57