vb.net - 从字符串 "" 到 '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 种不同的方式投射这些东西之后,我似乎也无法修复它。追溯感谢任何可以帮助和解释我做错了什么的人。
解决方案
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
推荐阅读
- spring-boot - 无法使用 intellij 运行 Spring Boot 应用程序,但能够从终端和 jar 文件运行应用程序
- laravel - 如何在 laravel API 中应用分页?
- c - 如何在C中定义一个负数
- python - 如何比较列表的所有元素
- javascript - 无法通过 Chrome 或 Edge 为日语环境打开本地文件
- html - 如何使用 ansible 和 jinja2 为多个主机生成 html 报告
- laravel - 如何将变量从插槽传递到 Laravel 中的布局?
- mysql - 如何使用 FastAPI 后端防止 Cloud Armor WAF SQL 注入提示?
- google-apps-script - In GAS, how can ‘instanceof’ be used for Spreadsheet?
- node.js - PM2 停不启动