首页 > 解决方案 > 从字符串 "" 到 'Double' 的转换无效。VB表格

问题描述

Private Sub STRPoints_ValueChanged(sender As Object, e As EventArgs) Handles STRPoints.ValueChanged
    If STRPoints.Value >= 10 Then
        STRScorelbl.Text = STRScorelbl.Text + (STRPoints.Value Mod 10)
    ElseIf STRPoints.Value < 10 Then
        STRScorelbl.Text = STRScorelbl.Text - (10 - STRPoints.Value)
    End If
End Sub

该代码应该在屏幕上显示一个数字作为标签,所述数字受2个不同事物的影响。首先是一个单选按钮,它向它添加 +2,另一个是 UpDownNumeric 框,它将它的值(Mod 10)添加到基数,顺便说一下也是 10。

错误是:

System.InvalidCastException:“从字符串“”到类型“Double”的转换无效。

我已经阅读了这个错误,但即使在以大约 100 种不同的方式投射这些东西之后,我似乎也无法修复它。追溯感谢任何可以帮助和解释我做错了什么的人。

标签: vb.net

解决方案


STRScorelbl.Text是空的。所以当你有这个代码时:

STRScorelbl.Text = STRScorelbl.Text +

在我们甚至不知道那个接线员的另一边是什么之前,你就已经有麻烦了。无论您如何尝试转换或转换空字符串,您都被卡住了。

如果你已经转向Option Strict On,就像任何好的项目都会做的那样,这个错误会更容易发现,因为编译器会向你抱怨并在 Visual Studio 编辑器中强调错误。保留 Option Strict Off 是非常糟糕的做法。

在打开 Option Strict 并修复此更改产生的任何其他有用的编译器错误后,您可以像这样修复它:

Private Sub STRPoints_ValueChanged(sender As Object, e As EventArgs) Handles STRPoints.ValueChanged
    Dim OriginalValue As Double = 0.0
    If Not String.IsNullOrWhitespace(STRScorelbl.Text) Then OriginalValue = Double.Parse(STRScorelbl.Text)

    If STRPoints.Value >= 10 Then
        OriginalValue += (STRPoints.Value Mod 10)
    Else
        OriginalValue -= (STRPoints.Value Mod 10)
    End If
    STRScorelbl.Text = OriginalValue.ToString()
End Sub

不仅如此,我不会使用文本标签控件作为数字数据的权威存储。相反,我会有这样的属性:

Private _Score As Double = 0.0
Public Property Score As Double
    Get
       Return _Score
    End Get
    Set
       _Score = value
       STRScorelbl.Text = _Score.ToString()
    End Set
End Property

然后您可以简化 ValueChanged() 方法:

Private Sub STRPoints_ValueChanged(sender As Object, e As EventArgs) Handles STRPoints.ValueChanged
    If STRPoints.Value >= 10 Then
        Score += (STRPoints.Value Mod 10)
    Else
        Score -= (STRPoints.Value Mod 10)
    End If
End Sub

推荐阅读