CType и Type casting Exception

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 за ""?

4 ответа

Используйте Int32.TryParse:

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

Это обрабатывает регистр "", а также любое другое недопустимое значение (т.е. не число), которое может ввести пользователь.

Ты можешь использовать IsNumeric

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

Вы можете назначить функцию return переменной сначала, а затем проверить переменную перед преобразованием.

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

Смотреть на TryCast а также Int32.TryParse,

Другие вопросы по тегам