【问题标题】:CType and Type casting ExceptionCType 和类型转换异常
【发布时间】:2011-02-25 17:22:23
【问题描述】:
Public Property Duration() As Integer
Get
  Try
    Return CType(Item(DurationColumn), Integer)
  Catch e As Global.System.InvalidCastException
    Throw New Global.System.Data.StrongTypingException("The value for column 'Duration' in table 'T_MembershipSale' is DBNull.", e)
  End Try
End Get
Set(ByVal value As Integer)
  Item(DurationColumn) = value
End Set
End Property

当用户想要将"" 作为Item(DurationColumn) 分配给整数时会发生什么?我得到一个例外。有什么干净的解决方案可以避免这种情况并将0 设置为""

【问题讨论】:

    标签: .net vb.net winapp


    【解决方案1】:

    使用Int32.TryParse:

    Dim number as Integer
    If Not Int32.TryParse(DurationColumn, number) Then number = 0
    return number
    

    这处理“”的情况,以及用户可能输入的任何其他无效值(即非数字)。

    【讨论】:

    • 对我来说,这是干净的方式。
    【解决方案2】:

    您可以先将函数返回分配给变量,然后在转换前检查变量。

        Dim sRet As String = Item(DurationColumn)
        If Not String.IsNullOrEmpty(sRet) Then Convert.ToInt32(sRet)
    

    【讨论】:

      【解决方案3】:

      看看TryCastInt32.TryParse

      【讨论】:

        【解决方案4】:

        你可以使用IsNumeric

            number = If(IsNumeric(DurationColumn), CType(DurationColumn, Integer), 0)
        

        【讨论】:

        • 那行不通。根据msdn.microsoft.com/en-us/library/6cd3f6w1.aspx,“如果要检查的字符串是包含逗号或美元符号的数字,IsNumeric 也将返回 True”。如果它是浮点数或大于适合整数的数字(即 Long 或 ULong),它也会返回 True。
        • @Jim Mischel,所描述的问题是检查“”,而不是检查溢出或其他问题。我理解你的意思,但是这段代码确实有效
        猜你喜欢
        • 2013-01-30
        • 1970-01-01
        • 2011-02-11
        • 2021-02-02
        • 2016-01-16
        • 1970-01-01
        • 1970-01-01
        • 2011-07-29
        • 1970-01-01
        相关资源
        最近更新 更多