VB编译器从字符串转换为数字

时间:2011-04-18 20:45:37

标签: vb.net type-conversion

这更多是关于VB编译器正在做什么的好奇心问题。基本上,以下代码会生成错误,

    If "String" = CInt(1) Then

    End If

应该如此。让我好奇的是报告的错误是

Conversion from string "String" to type 'Double' is not valid.

所以,我想我的问题是,为什么编译器会尝试转换为Double,因为我认为它应该转换为Integer?

1 个答案:

答案 0 :(得分:2)

以下可以给出一些提示。

以下

If "String" = CInt(1) Then

End If

innerexception stacktrace显示

at Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value, NumberFormatInfo NumberFormat)
at Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value)

即使您将声明更改为

If "String" = CDbl(1) Then

If "String" = CDec(1) Then

它仍然显示上面给出的innerexception stacktrace。

这意味着它必须对右侧值无效。这是编译器的行为,同时进行隐式转换以将字符串转换为更容易接受的数据类型,这是双倍的(长的将是太长的双关语)。

可以通过将语句更改为:

来证明此行为
If CInt("String") = CLng(1) Then

End If

为此,innerexception stacktrace显示

at Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat)
at Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)

这意味着即使对于显式类型转换,它首先尝试将字符串转换为double(最适应),然后将其转换为整数。