0d和(double)0之间有什么区别?

时间:2014-06-24 05:01:08

标签: c#

示例1:

if ((Value ?? 0d) <= 0d)
{
    //some code
}

示例2:

if ((Value ?? (double)0) <= (double)0)
{
    //some code
}

这两者有什么区别?哪一个更好用?

2 个答案:

答案 0 :(得分:5)

两个代码片段都是等效的,因为类型转换将由编译器在编译时执行,结果视为常量。请注意,这是标准行为,而不仅仅是编译器优化;否则,您将无法使用强制转换为常量:

    const double d1 = (double)0;          // allowed
    const double d2 = Math.Pow(2, 4);     // error: "The expression being assigned to 'd2' must be constant"

尽管如此,仍然需要指定正确的文字后缀,因为它可以使您的代码保持简洁。另一种用于指定双精度的流行约定是附加.0

if ((Value ?? 0.0) <= 0.0)

答案 1 :(得分:3)

第一个更好。

第二个使得演员在运行时发生。第一个声明常量为双倍。