繁体   English   中英

在 VB.NET 中将字符串转换为整数的 TryCast

[英]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 上转换类

来自 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.MaxValueInteger.MinValue ,你最终将无法进行转换......

所以你可以使用Double

Double.TryParse(MyString, MyDouble)

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

Decimal.TryParse(MyString, MyDecimal)

请参阅 MSDN 上的小数

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

如果您尝试将输入参数转换为整数,您可以尝试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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM