【问题标题】:VB Compiler Conversion from string to numberVB编译器从字符串到数字的转换
【发布时间】:2011-08-08 04:45:42
【问题描述】:

这更像是一个关于 VB 编译器在做什么的好奇问题。基本上下面的代码会产生错误,

    If "String" = CInt(1) Then

    End If

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

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

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

【问题讨论】:

  • 这更多的是与类型提升有关,而不是类型转换。
  • 似乎没有“类型促销”标签。但是,是的,我认为你是对的。

标签: vb.net type-conversion


【解决方案1】:

以下可以给出一些提示。

关注

If "String" = CInt(1) Then

End If

内部异常堆栈跟踪显示

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

它仍然显示上面给出的内部异常堆栈跟踪。

这意味着它与右手边的值无关。这是编译器在进行隐式转换时的行为,以将字符串转换为更适合的数据类型,即双关(long 将是太长的双关语)。

可以通过将语句更改为:

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

End If

为此,内部异常堆栈跟踪显示

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

这意味着即使是显式类型转换,它也会首先尝试将字符串转换为双精度(最适合),然后再将其转换为整数。

【讨论】:

    猜你喜欢
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    相关资源
    最近更新 更多