Operador DirectCast (Visual Basic)

Apresenta uma operação de conversão de tipo com base na herança ou implementação.

Comentários

O DirectCast não usa as rotinas auxiliares de tempo de execução do Visual Basic para conversão; portanto, ele pode fornecer um desempenho um pouco melhor do que o CType ao converter de e para o tipo de dados Object.

Você usa a palavra-chave DirectCast semelhante à maneira como usa a Função CType e a palavra-chave Operador TryCast. Você fornece uma expressão como o primeiro argumento e um tipo para convertê-la como o segundo argumento. O DirectCast testa uma relação de herança ou implementação entre os tipos de dados dos dois argumentos. Isso significa que um tipo deve herdar de ou implementar o outro.

Erros e falhas

O DirectCast gerará um erro do compilador se detectar que não existe nenhuma relação de herança ou implementação. Mas a falta de um erro do compilador não garante uma conversão bem-sucedida. Se a conversão desejada estiver estreitando, ela poderá falhar em tempo de execução. Se isso acontecer, o runtime gerará um erro InvalidCastException.

Palavras-chave de conversão

Uma comparação das palavras-chave de conversão de tipo é a seguinte.

Palavra-chave Tipos de dados Relação de argumento Falha em tempo de execução
Função CType Qualquer tipo de dados A conversão de expansão ou de restrição deve ser definida entre os dois tipos de dados Gera InvalidCastException
DirectCast Qualquer tipo de dados Um tipo deve herdar ou implementar o outro tipo Gera InvalidCastException
Operador TryCast Apenas tipos de referência Um tipo deve herdar ou implementar o outro tipo Retorna Nada

Exemplo

O exemplo a seguir demonstra dois usos de DirectCast, um que falha em tempo de execução e outro que é bem-sucedido.

Dim q As Object = 2.37
Dim i As Integer = CType(q, Integer)
' The following conversion fails at run time
Dim j As Integer = DirectCast(q, Integer)
Dim f As New System.Windows.Forms.Form
Dim c As System.Windows.Forms.Control
' The following conversion succeeds.
c = DirectCast(f, System.Windows.Forms.Control)

No exemplo anterior, o tipo de tempo de execução de q é Double. O CType é bem-sucedido porque Double pode ser convertido em Integer. No entanto, o primeiro DirectCast falha em tempo de execução porque o tipo de tempo de execução de Doublenão tem nenhuma relação de herança com Integer, embora exista uma conversão. O segundo DirectCast é bem-sucedido porque converte do tipo Form em tipo Control, do qual Form herda.

Confira também