Неявное приведение в VB.NET - PullRequest
2 голосов
/ 12 апреля 2010

Вопрос предназначен для ленивых программистов 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? Когда я могу положиться?

Ответы [ 4 ]

3 голосов
/ 12 апреля 2010

Использование «1001», безусловно, не «запрещено», но почти всем настоятельно рекомендуется использовать Option Strict On.

Причины объясняются в других вопросах, например this .

1 голос
/ 12 апреля 2010

Комментарий к MarkJ перейти к ответу за OP

Не стесняйтесь полагаться на все, что вы хотите, просто убедитесь, что вы знаете правила для того, что делает неявное приведение. Тем не менее, в будущем пример № 4 будет действительно легко сломать, я был бы намного счастливее, если бы до этого была хотя бы нулевая проверка.

0 голосов
/ 12 апреля 2010

Ирония таких "ленивых" практик, как эта, заключается в том, что в конечном итоге они часто стоят вам больше времени. Можете ли вы быть абсолютно уверены в том, что ваши входные данные всегда будут в формате, который можно автоматически привести к требуемому типу при любых обстоятельствах и во всех локалях?

Продумывание всех возможных последствий и обработка почти неизбежных ошибок, вероятно, займет больше времени, чем просто строгий набор переменных, строгая проверка ваших входных данных и явное приведение в необходимых случаях.

0 голосов
/ 12 апреля 2010

Если вы используете Visual Basic 2008, другой вариант выполняет явное приведение (например, Option Strict On) и полагается на Option Implicit On, так что вам не нужно писать тип дважды.

Dim x = 5.ToString()  
Dim data = DirectCast(sender.Tag, Contact)
...