条件语句中0对0.0

时间:2012-01-31 00:27:24

标签: c# zero conditional-statements

之间是否存在差异:

double dandouble = 5.23493; //or some other random number

if (dandouble < 0.0)
    dandouble = 3.5;

double dandouble = 5.23493; //or some other random number

if (dandouble < 0)
    dandouble = 3.5;

或者他们会得到相同的结果吗?

3 个答案:

答案 0 :(得分:3)

编译器必须发出Opcodes.Clt IL instruction才能进行比较。 CLI规范规定了指令的可接受参数,不允许使用double和int。意识到这些规则,编译器会提升参数以获得有效组合,double和double是第一个匹配。它有足够的智慧来识别int参数是一个文字。所以不发出任何IL进行转换,它直接发出一个Opcodes.Ldc_R8为0.0

没有区别。

答案 1 :(得分:1)

没有区别。他们是一样的。

答案 2 :(得分:1)

double a = 0.0000000000001;
int b = 0;

res = a <= b; // False
res2 = b >= a; // False

鉴于上述测试,我说C#选择了最少的有损转换。 (不是左侧或右侧的偏好)

所以回答你的问题,不。没有区别。