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

Jam*_*man 3 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
Run Code Online (Sandbox Code Playgroud)

错误说明了

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

我做错了什么的解释是什么?

TryParse不接受超过10位数字,例如,输入"12345678901"将不被接受.我该如何解决?

Mar*_*ans 12

让我们试着理解TryCast,Convert和TryParse之间的区别.

TryCast

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

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

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

兑换

在MSDN上转换类

来自MSDN:

将基本数据类型转换为另一种基本数据类型.

所以我们可以尝试:

Dim myInt = Convert.ToInt32(MyObject)
Run Code Online (Sandbox Code Playgroud)

问题是,InvalidCastException如果无法进行转换,它将产生异常.

的TryParse

此功能正在尝试将a转换String为您想要的内容.它不会产生异常:

Dim myInt As Integer = 0
If Not Integer.TryParse(MyString, myInt) Then
    MessageBox.show("This is not an integer")
End If
Run Code Online (Sandbox Code Playgroud)

局限性

将字符串转换为整数有时会很棘手......如果字符串表示的数字大于或小于Integer.MaxValueInteger.MinValue,则最终没有转换...

所以你可以用Double:

Double.TryParse(MyString, MyDouble)
Run Code Online (Sandbox Code Playgroud)

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

Decimal.TryParse(MyString, MyDecimal)
Run Code Online (Sandbox Code Playgroud)

请参阅MSDN上的小数

根据MSDN,Decimal仍然有Max和Min值:

的十进制值类型表示十进制数范围从正到79,228,162,514,264,337,593,543,950,335负79,228,162,514,264,337,593,543,950,335.Decimal值类型适用于需要大量有效积分和小数位且没有舍入误差的财务计算.

Convert.ChangeType

这个也很有趣,但有点奇怪......