使用Reflection的比较运算符

Jef*_*eff 2 c# reflection iequalitycomparer

我想在运行时使用反射比较两个值.我正在使用Comparer.Default.Compare(x,y),但我已经意识到这还不够.假设我想比较一个double和一个(1.0 == 10).Comparer.Default将抛出异常,因为它坚持两个值必须是相同的类型(double).但是,存在显式转换,这正是我想要使用的.

那么,为什么我不能只使用Convert.ChangeType?以1.25> 1(双>整数)为例.如果我在1.25上尝试Convert.ChangeType(1.25,typeof(int)),我将得到1,并且当真正的1.25 IS> 1时,上面的断言将失败.

那么,有人可以建议一种调用类型定义的显式比较(如果存在)的方法吗?

谢谢.

Jon*_*eet 5

你在使用C#4和.NET 4吗?如果是这样,使用动态类型非常容易:

dynamic x = firstValue;
dynamic y = secondValue;
if (x > y) // Or whatever
Run Code Online (Sandbox Code Playgroud)

编译器会为您执行所有适当的转换.