我完全不了解如何在我的代码中使用TryCast,但我需要使用它来验证用户输入。我已经做了各种搜索,并在这里查看了各种问题,但似乎没有人真正说出如何使用它,MSDN网站似乎没有任何帮助。
Function ValidateInput(Var_In As String) As Integer
If TryCast(Var_In, Integer) = Nothing Then
Return vbNull
Else
Return Var_In
End If
End Function
错误说
操作数必须是引用类型,但Integer的值类型为
我做错了什么解释?
TryParse不接受超过10位数字,例如,输入“12345678901”将不被接受。我该如何解决这个问题?
答案 0 :(得分:10)
让我们尝试了解 TryCast,Convert和TryParse 之间的差异。
<强> TryCast 强>
此函数将尝试将一个对象转换为另一种类型,只要它是引用类型。
Dim MyNewObject = TryCast(MyObject, MyReferenceClass)
If IsNothing(MyNewObject) Then
MessageBox.Show("Impossible to cast")
End If
由于Integer是一个值类型,它不起作用,所以我们必须弄清楚...
<强>转换强>
来自MSDN:
将基本数据类型转换为另一种基本数据类型。
所以我们可以试试:
Dim myInt = Convert.ToInt32(MyObject)
问题是,如果无法进行转换,它会生成例外InvalidCastException
。
<强>的TryParse 强>
此功能正在尝试将String
转换为您想要的内容。它不会产生异常:
Dim myInt As Integer = 0
If Not Integer.TryParse(MyString, myInt) Then
MessageBox.show("This is not an integer")
End If
限制
将字符串转换为整数有时会很棘手......如果字符串表示的数字大于或小于Integer.MaxValue
和Integer.MinValue
,则最终不会转换...
所以你可以使用Double
:
Double.TryParse(MyString, MyDouble)
或者就个人而言,如果您知道它将是一个数字,请使用十进制:
Decimal.TryParse(MyString, MyDecimal)
根据MSDN,Decimal仍然具有最大值和最小值:
十进制值类型表示十进制数,范围从正数79,228,162,514,264,337,593,543,950,335到负数79,228,162,514,264,337,593,543,950,335。十进制值类型适用于需要大量有效积分和小数位且没有舍入误差的财务计算。
<强> Convert.ChangeType 强>
This one也很有趣,但有点奇怪......
答案 1 :(得分:1)
您正在尝试对整数执行TryCast
,这是值类型。 TryCast
仅适用于引用类型,例如(但不限于)Class
,Object
或String
类型。
如果您尝试将输入参数转换为Integer,则可以尝试Convert
类中的一种方法,例如Convert.ToInt32()
或Integer.TryParse
。
答案 2 :(得分:1)
使用TryParse:
代替TryCastFunction ValidateInput(Var_In As String) As Integer
Dim iNum As Integer
If (Integer.TryParse(Var_In, iNum)) Then
Return iNum
Else
Return vbNull
End If
End Function
答案 3 :(得分:0)
使用TryParse更好:
Function ValidateInput(Var_In As String) As Integer
Dim num as Integer
If Not Integer.TryParse(Var_In, num) Then
Return vbNull
Else
Return num
End If
End Function
答案 4 :(得分:0)
我迟到了讨论,但如果有人在这里(像我一样)寻找快速而肮脏的解决方案,这里是我在 DataGridView 控件中用于简单单元格验证的函数。
Function TryTypeFit(theString As String, theType As Type, ShowError As Boolean) As Boolean
Dim TempReturn As Boolean = False
Dim TempObject As Object
Try
TempObject = Convert.ChangeType(theString, theType)
TempReturn = True
Catch ex As Exception
' didn't work
TempReturn = False
If ShowError Then
Dim eMessage As String = "Error: Value must be castable to a " & CStr(theType.Name)
MsgBox(eMessage)
End If
End Try
100: 返回温度返回 结束函数