使用反射的比较运算符 - c#

我想在运行时使用反射来比较两个值。我为此使用了Comparer.Default.Compare(x,y),但是我意识到这还不够。假设我要比较双精度数与单个(1.0 == 10)。 Comparer.Default将引发异常,因为它坚持两个值必须为同一类型(双精度)。但是,为此存在显式转换,这确实是我要使用的转换。

那么,为什么不能只使用Convert.ChangeType?以1.25> 1(双精度>整数)为例。如果我在1.25上尝试Convert.ChangeType(1.25,typeof(int)),我将得到1,而当实际1.25 IS> 1时,上述断言将失败。

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

谢谢。

参考方案

您正在使用C#4和.NET 4吗?如果是这样,使用动态类型真的很容易:

dynamic x = firstValue;
dynamic y = secondValue;
if (x > y) // Or whatever

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

与哪些运算符>>兼容 - java

我这里没有什么代码int b=3; b=b >> 1; System.out.println(b); 它可以完美工作,但是当我将变量b更改为byte,short,float,double时,它包含错误,但是对于变量int和long来说,它可以完美工作,为什么它不能与其他变量一起工作? 参考方案 位移位运算符(例如>>)与任何整数类型兼…

剃刀付款集成->如何通过关闭按钮X检测剃刀付款模型是否关闭 - javascript

当用户关闭而无需付款时,我在CI框架中使用Razorpay,请创建razor支付模型,然后取消订单,我希望按状态更改为已取消的状态触发查询。所以我怎么能检测到这一点。我已经通过单击jQuery单击关闭功能但无法使用... javascript大神给出的解决方案 Razorpay提供了JS方法来检测模式关闭。您编写的任何JS代码都不会在结帐页面上运行,因为它是…

如何使用箭头符号(->)创建受保护的方法? - java

当我们编写以下代码时Stream.of(1,2,3,4,5).filter(i -> (i%2 == 0)).map( i -> i*i ); 表达式i -> (i%2 == 0)或i -> i*i将变为私有方法。在我的用例中,编写了一个junit测试,以确保没有方法是私有的(是的,这是强制性的),并且对于这些lambda表达式而言,…

C#:使用System.Reflection.GetFields()显示字段元数据 - c#

This question already has answers here: Closed 8 years ago. Possible Duplicate: Find a private field with Reflection?我正在尝试使用System.Reflection.GetFields()方法显示类的字段名称。问题是,仅当字段被声明为“ pu…

粗糙的Unicode->没有CLDR的语言代码? - javascript

我在写字典应用。如果用户键入Unicode字符,我想检查该字符是哪种语言。例如字 - returns ['zh', 'ja', 'ko'] العربية - returns ['ar'] a - returns ['en', 'fr', …