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 Double
nã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.