Это не обязательно, если вы знаете, что отправляемое значение является целым числом, но если вы не знаете, что он действительно ввел, полезно создать CType для создания преобразования типа. Пример:
'OK
Dim x As Int32 = "1246"
'Error
Dim y As Int32 = "ABC"
Автоматически, то Visual Basic синтаксического анализа преобразует значения одного типа к другому типу (т.е. из Option Strict Off
)
Dim A As Int32 = "3587" 'String type => Integer
' Automatically, the Parser will do this:
Dim B As Int32 = CType("3587".ToString, Int32)
Это сделано в каждой структуре или класса, все из которых имеют CType узкий и широкий, который преобразует тип структур, например:
Public Shared Widening Operator CType(ByVal a As String, ByVal b As Int32) As Int32
Dim TMP% = a.ToString 'Cast
Return CInt(TMP)
End Operator
Существует булева функция, которая возвращает истину, если строка является производными е рум целое и могут быть преобразованы, это сделает ваш код и освободит многие Try...End Try
:
Try
Dim n As Int32 = "abc"
Catch ex As Exception
MsgBox("Invalid cast")
End Try
'replace with:
Dim yourInput$ = "AbcDef447"
Dim _yourInput$ = "3867"
Dim myNum As Int32? = 0
If IsNumeric(yourInput) Then
Console.WriteLine("yourInput can be an integer.")
myNum = yourInput
ElseIf IsNumeric(_yourInput) Then
Console.WriteLine("_yourInput can be an integer.")
myNum = _yourInput
Else
Console.WriteLine("No one can be an integer.")
GC.SupreessFinalize(myNum)
End If
'Output:
'_yourInput can be an integer.
'then finally: myNum is 3867.
Во всяком случае, это всегда хорошо использовать методы, которые можно проверить, может ли быть преобразован тип, попробуйте с помощью метода TryParse
(доступны во всех типах, например Int32.TryParse
) или с операторами CType
.
Пользователь может тривиально разрушить вашу программу, введя свое имя вместо номера. Вы можете обвинить пользователя или можете обвинить себя в том, что вы не используете Integer.TryParse(). Это тебе решать. –
Если у вас есть опция Strict On, вы обнаружите проблему в своей программе, когда пытаетесь ее скомпилировать, без нее ваш пользователь обнаружит проблему в вашей программе при вводе строки, которая не может быть «автоматически» преобразована в число. Это зависит от того, хотите ли вы быть профессионалом или нет. – Steve
@HansPassant, и почему я должен использовать цикл do в vb.net, чтобы пользователь не мог зацикнуться в бесконечном цикле, может быть, в случае написания моего имени? – Anas