Operador DirectCast (Visual Basic)
Introduz uma operação de conversão de tipos baseadas em herança ou implementação.
Comentários
DirectCast não usa as rotinas auxiliares de tempo de execução do Visual Basic para conversão, portanto, ele poderá fornecer um desempenho melhor do que CType durante a conversão tendo como origem ou destino Object.
Você pode usar o DirectCast a palavra-chave semelhante à maneira como você pode usar o Função CType (Visual Basic) e o Operador TryCast (Visual Basic) palavra-chave. Você fornecer uma expressão, como o primeiro argumento e um tipo para convertê-lo para como o segundo argumento. DirectCastrequer 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
DirectCast gera um erro do compilador se ele detectar que nenhuma relação de herança ou implementação existe. Mas a falta de um erro do compilador não garante uma conversão bem-sucedida. Se a conversão desejada é de restrição, ele pode falhar em tempo de execução. Se isso acontecer, o tempo de execução gera um erro InvalidCastException.
Palavras-chave conversão
Uma comparação entre as palavras-chave conversão de tipos é a seguinte:
Keyword |
Tipos de dados |
Relacionamento de argumento |
Falha em tempo de execução |
Quaisquer tipos de dados |
Expandir ou restringir a conversão deve ser definido entre os dois tipos de dados. |
Gera InvalidCastException |
|
DirectCast |
Quaisquer tipos de dados |
Um tipo deve herdar de ou implementar o outro tipo |
Gera InvalidCastException |
Somente tipos de referência |
Um tipo deve herdar de ou implementar o outro tipo |
Retorna Nada (Visual Basic) |
Exemplo
O exemplo a seguir demonstra dois usos do 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 tempo de execução digite de q é Double. CTypeé bem-sucedida pois Double pode ser convertido em Integer. No entanto, o primeiro DirectCast falha no tempo de execução porque tem o tipo em tempo de execução de Double não tem relação de herança com Integer, mesmo que exista uma conversão. O segundo DirectCast é bem-sucedido pois ele converte do tipo Form para o tipo Control, do qual Form herda.