[英]TryCast for string to integer in VB.NET
我完全不明白如何在我的代码中使用 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
错误说
操作数必须是引用类型,但整数是值类型
我做错了什么的解释是什么?
TryParse 不接受超过 10 位的数字,例如,“12345678901”的输入将不被接受。 我该如何解决这个问题?
让我们尝试了解TryCast、Convert 和 TryParse之间的区别。
试播
此函数将尝试将一个对象转换为另一种类型,只要它是引用类型。
Dim MyNewObject = TryCast(MyObject, MyReferenceClass)
If IsNothing(MyNewObject) Then
MessageBox.Show("Impossible to cast")
End If
由于Integer是值类型,所以行不通,所以我们得想办法……
转换
来自 MSDN:
将基本数据类型转换为另一种基本数据类型。
所以我们可以试试:
Dim myInt = Convert.ToInt32(MyObject)
问题在于,如果无法进行转换,它将生成异常InvalidCastException
。
尝试解析
这个函数试图将一个String
转换成你想要的东西。 它不会产生异常:
Dim myInt As Integer = 0
If Not Integer.TryParse(MyString, myInt) Then
MessageBox.show("This is not an integer")
End If
限制
将 String 转换为 Integer 有时会很棘手......如果 String 表示一个大于或小于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 的十进制数。 Decimal 值类型适用于需要大量有效整数和小数位且没有舍入错误的财务计算。
转换.ChangeType
这个也很有意思,就是有点奇怪……
您正在尝试对 Integer(值类型)执行TryCast
。 TryCast
仅适用于引用类型,例如(但不限于) Class
、 Object
或String
类型。
如果您尝试将输入参数转换为整数,您可以尝试Convert
类中的方法之一,例如Convert.ToInt32()
或Integer.TryParse
。
使用 TryParse 代替 TryCast:
Function 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
更好的是使用 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
我迟到了讨论,但是如果有人在这里(像我一样)寻找快速而肮脏的解决方案,这里有一个函数,我在 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:返回TempReturn结束函数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.