C# 0d和(双)0之间有什么区别?

C# 0d和(双)0之间有什么区别?,c#,C#,例1: if ((Value ?? 0d) <= 0d) { //some code } if((值??0d)第一个更好 第二个是在运行时进行转换。第一个是立即将常量声明为double。两个代码段都是等效的,因为类型转换将由编译器在编译时执行,并且结果被视为常量。请注意,这是标准行为,而不仅仅是编译器优化;否则,您将无法要对常量使用强制转换,请执行以下操作: const double d1 = (double)0; // allowed cons

例1:

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

if((值??0d)第一个更好


第二个是在运行时进行转换。第一个是立即将常量声明为double。

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

    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)

如果((值0.0)FWIW:
(值0)MSDN表示:默认情况下,赋值运算符右侧的实数文本被视为double。但是,如果希望整数被视为double,请使用后缀d或d。实际上,这两个数字都编译为相同的代码,在第二种情况下没有运行时强制转换。@UlugbekUmirov,这将得益于编译器optimi我想说的是,调试可能会有所不同,但发布可能会有所不同。无论如何,当您可以只使用您首先需要的类型的文本时,将文本转换为另一种类型会使代码变得不必要的复杂。@jmchiliney在这种情况下,它也将在调试模式下进行优化。但我同意您的看法,第一个ethod是合适的方法。
if ((Value ?? 0.0) <= 0.0)