什么是它们之间的区别(如果有的话)?
decimal d = (decimal) myDouble;
decimal d = new decimal(myDouble);
decimal d = Convert.ToDecimal(myDouble);
没有区别。如果您查看源代码:
十进制:
public static explicit operator decimal(double value)
{
return new decimal(value);
}
在转换中:public static decimal ToDecimal(float value)
{
return (decimal) value;
}
所以最终他们都会调用 new decimal(double)
。
从功能角度来看,实际上没有任何区别。这些都是实现相同结果的不同方法。
需要注意的是,在Convert.ToDecimal的情况下,您可以指定IFormatProvider(culture)格式,因此您可以获得更多的灵活性。
如果您不关心多文化环境,请选择您喜欢的任何一种方法。
(decimal)value
和new decimal(value)
之间可能存在差异:第一个调用内置的double-to-decimal转换运算符,而第二个调用decimal构造函数的重载。尽管本地代码可能相同,但IL可能不同,而C#语义肯定不同。 - phoog(decimal)value
和new decimal(value)
。 - JKorcall valuetype [mscorlib]System.Decimal [mscorlib]System.Decimal::op_Explicit(float64)
。构造函数示例编译为:call instance void [mscorlib]System.Decimal::.ctor(float64)
。它们最终在运行时编译为不同的internalcall
方法。 - phoogpublic static explicit operator aType
编译成一个名为op_Explicit(aType)
的方法) - JKor