2012-03-04 42 views
1

当Int32没有实现相等运算符时,这是如何工作的?结构相等如何与Int32一起使用?

bool y = 6 == 5; 
+0

好的,当我知道答案时,我问了一个主要问题。我真的应该问具体问题。所以这里是它http://stackoverflow.com/questions/9552760/how-to-detect-if-a-type-supports-equaility-with-no-operator – Simon 2012-03-04 06:11:14

回答

6

基本数字类型的==运算符是语言规范的一部分,而不是框架类型。它编译成专用的IL指令(ceq),而不是方法调用。

对于所有其他基本运算符(包括算术运算,比较运算和转换运算)也是如此。

+0

谢谢。给一个类型如何检测一个类型是否支持ceq? – Simon 2012-03-04 06:02:08

+0

@Simon:你不会的。这是一种语言级别的功能。你想做什么? – SLaks 2012-03-04 06:04:26

2

当Int32没有实现相等运算符时,这是如何工作的?

对不起,我觉得你有缺陷的前提是出:-)从docs

的的Int32类型支持标准的数学运算,如加法,减法,除法,乘法,减法,否定,和一元否定。与其他整型类型一样,Int32类型也支持按位AND,OR,XOR,左移和右移运算符。

您可以使用标准数字运算符来比较两个Int32值或者您可以调用CompareTo或Equals方法。

0

只是为了添加到SLaks的答案,比较int32是经常这么多的类,这将是一个巨大的性能问题,而不是以自定义的方式实现这一点。这个专用的IL指令实际上会编译成一个非常快速的机器指令来执行这个操作。

它与java不得不使用它的原始类型相同。使用面向对象语言时,您始终存在“纯度”的问题,您没有int32,您有一个“整数”对象,或者您允许原始类型,接受复杂性并从它们可以添加的速度中受益。

相关问题