Decimal.ToDouble Vs CType(x,Double)推荐/首选的是什么

时间:2015-08-11 13:26:03

标签: .net vb.net casting double type-conversion

我的目标是将从Decimal控件返回的NumericUpDown转换为Double

我可以使用

MyDouble = Convert.ToDouble(MyDecimal)

MyDouble = CType(MyDecimal, Double)

或者,根据MSDN Decimal有一个ToDouble方法,所以我想:

MyDouble = MyDecimal.ToDouble

首选/推荐的方法是什么?为什么最后一个选项会给出一个未指定参数的错误?

WRT该问题的第一部分,如果是不同的转换方法应该用于不同类型的对象的情况,是否有一些地方(最好是MSDN)哪里有关于哪个对象的信息/要求可以参考吗?

2 个答案:

答案 0 :(得分:3)

可能值得阅读的是this page on MSDN(转换函数,CType,DirectCast和System.Convert部分)。

你的问题的答案是“它取决于”。例如,它在该页面上说明了

  

生成的确切方法调用或IL指令取决于   用于转换的表达式。一些   转换被优化掉,例如被替换的CInt(123.45)   在IL中具有整数常数123。这是一个例子   使用Visual Basic Runtime会产生更好的性能   使用System命名空间

但最后的建议是:

  

推荐:对于大多数转化,请使用内在语言   转换关键字(包括 CType ),以简洁明了   在类型之间进行转换时允许编译器优化。使用    DirectCast ,用于将Object转换为String并提取值   当嵌入类型已知时(对象),在对象变量中装箱的类型   是,强制是没有必要的。)

答案 1 :(得分:-1)

在效率方面,CType并不是最好的。 使用Convert.ToDouble()更为可接受,因为它通常更有效。

正如上面的评论中所提到的,.ToDouble是一种共享方法,所以你必须去:

    Dim test As Decimal = 2.22
    Dim myDouble As Double

    myDouble = Convert.ToDouble(test)

    myDouble = Decimal.ToDouble(test)

上述任何一种方法都可以改变类型。