我的目标是将从Decimal
控件返回的NumericUpDown
转换为Double
。
我可以使用
MyDouble = Convert.ToDouble(MyDecimal)
或
MyDouble = CType(MyDecimal, Double)
或者,根据MSDN Decimal
有一个ToDouble
方法,所以我想:
MyDouble = MyDecimal.ToDouble
首选/推荐的方法是什么?为什么最后一个选项会给出一个未指定参数的错误?
WRT该问题的第一部分,如果是不同的转换方法应该用于不同类型的对象的情况,是否有一些地方(最好是MSDN)哪里有关于哪个对象的信息/要求可以参考吗?
答案 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)
上述任何一种方法都可以改变类型。