Неявное кастинг в VB.Net
-
26-09-2019 - |
Вопрос
Вопрос предназначен для программистов Lazy VB. Пожалуйста.
В VB я могу сделать, и я не получу ошибок.
Пример 1.
Dim x As String = 5
Dim y As Integer = "5"
Dim b As Boolean = "True"
Пример 2.
Dim a As EnumType = 4
Dim v As Integer = EnumType.EnumValue
Пример 3.
Private Sub ButtonClick(sender As Object, e As EventArgs)
Dim btn As Button = sender
End Sub
Пример 4.
Private Sub ButtonClick(sender As Button, e As EventArgs)
Dim data As Contact = sender.Tag
End Sub
Если я, безусловно, знаю ожидаемый тип выполнения, это «запрещено», чтобы полагаться на встроенный кастинг языка VB? Когда я могу положиться?
Решение
Комментарий к Markj Перейти к ответу на OP
Не стесняйтесь полагаться на него все, что вы хотите, просто убедитесь, что вы знаете правила для того, что делает неявный отказ. Тем не менее, пример № 4 выглядит очень легко сломать в будущем, я бы намного счастливее, если бы был хотя бы нуль-проверка раньше.
Другие советы
Это, безусловно, не «запрещено» использовать Option Strict Off
Но почти все настоятельно советуют использовать Option Strict On
.
Причины объясняются в других вопросах, например это.
Если вы используете Visual Basic 2008, другой вариант выполняет отливку CaventiTalyey (например, опция Strict On) и полагаться на опцию, неявную, чтобы вам не нужно писать тип дважды.
Dim x = 5.ToString()
Dim data = DirectCast(sender.Tag, Contact)
Ирония «ленивых» практик, как такова, что они часто заканчиваются вам больше времени в долгосрочной перспективе. Можете ли вы быть абсолютно уверены, что ваши входы всегда будут в формате, которые могут автоматически быть отбрасываться на предполагаемый тип, при любых обстоятельствах и во всех помещениях?
Мышление по всему возможным последствиям, и обрабатывая почти неизбежные ошибки, вероятно, займет больше времени, чем просто набрав ваши переменные, строго проверяя ваши входы и явно отличающиеся, где это необходимо.