我想在运行时使用反射来比较两个值。我为此使用了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