在VB.NET中将tryCast用于字符串到整数

时间:2016-03-31 13:42:00

标签: 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

错误说

  

操作数必须是引用类型,但Integer的值类型为

我做错了什么解释?

TryParse不接受超过10位数字,例如,输入“12345678901”将不被接受。我该如何解决这个问题?

5 个答案:

答案 0 :(得分:10)

让我们尝试了解 TryCast,Convert和TryParse 之间的差异。

<强> TryCast

此函数将尝试将一个对象转换为另一种类型,只要它是引用类型。

Dim MyNewObject = TryCast(MyObject, MyReferenceClass)
If IsNothing(MyNewObject) Then
    MessageBox.Show("Impossible to cast")
End If

由于Integer是一个值类型,它不起作用,所以我们必须弄清楚...

<强>转换

Convert Class on MSDN

来自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.MaxValueInteger.MinValue,则最终不会转换...

所以你可以使用Double

Double.TryParse(MyString, MyDouble)

或者就个人而言,如果您知道它将是一个数字,请使用十进制:

Decimal.TryParse(MyString, MyDecimal)

See Decimals on MSDN

根据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仅适用于引用类型,例如(但不限于)ClassObjectString类型。

如果您尝试将输入参数转换为Integer,则可以尝试Convert类中的一种方法,例如Convert.ToInt32()Integer.TryParse

答案 2 :(得分:1)

使用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

答案 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: 返回温度返回 结束函数