Vb.net 提取DataGridViewCell值而不进行转换的语法

Vb.net 提取DataGridViewCell值而不进行转换的语法,vb.net,datagridview,Vb.net,Datagridview,我知道我能做到: Dim Amount As Double = CDbl(DGVRow.Cells("Amount").Value) 但是我的DGV单元格已经是一个双精度的,所以我不需要转换就可以得到他的值 我尝试了下面的代码(但语法不正确) 如果您确定该单元格包含类型为Double的值,则使用DirectCast Dim Amount As Double = DirectCast(DGVRow.Cells("Amount").Value, Double) Dim Amount As Dou

我知道我能做到:

Dim Amount As Double = CDbl(DGVRow.Cells("Amount").Value)
但是我的DGV单元格已经是一个
双精度的
,所以我不需要转换就可以得到他的值

我尝试了下面的代码(但语法不正确)


如果您确定该单元格包含类型为
Double
的值,则使用
DirectCast

Dim Amount As Double = DirectCast(DGVRow.Cells("Amount").Value, Double)
Dim Amount As Double = DirectCast(DGVRow.Cells("Amount").Value, Double)

另一种方法是直接处理有界数据源的值,正如@puropoix在注释中所解释的那样

如果您知道它总是包含一个双精度,那么您应该使用
DirectCast

Dim Amount As Double = DirectCast(DGVRow.Cells("Amount").Value, Double)
Dim Amount As Double = DirectCast(DGVRow.Cells("Amount").Value, Double)
这些都会产生Double类型的结果变量

Dim value As Object
value = 1.23#
Dim resultDC = DirectCast(value, Double)
Dim resultCT = CType(value, Double)
Dim resultCDBL = CDbl(value)
但是在幕后发生的事情是不同的。DirectCast是最直接的

查看这篇文章,其中详细介绍了VB.net中转换方法之间的差异。还有这个


基本上,当您知道您的对象包含您期望的类型时,最好使用DirectCast,因此无需进行转换。它将比其他选项更快。

因为列/单元格需要能够包含任何内容,它将返回
对象
,这意味着您的值已装箱。如果你有一个数据源,你可以做很多你想做的事情:
dimd=dt.Rows(n).Field(Double)(“Amount”)
。还有一种转变,只是一种不同的转变。对于货币类型的值,十进制将是更好的选择though@Plutonix否。在本例中,我没有将数据表设置为源。我选择“Double”是因为我必须使用“Double”进行计算,而且我不需要极高的精度。无论如何,谢谢你的宝贵提示;)特别是如果是钱和计算的话,
Decimal
是一个更好的选择。它可以防止舍入错误-请参阅和