示例1:
if ((Value ?? 0d) <= 0d)
{
//some code
}
示例2:
if ((Value ?? (double)0) <= (double)0)
{
//some code
}
这两者有什么区别?哪一个更好用?
答案 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)
第一个更好。
第二个使得演员在运行时发生。第一个声明常量为双倍。