Operador TryCast (Visual Basic)
Apresenta uma operação de conversão de tipo que não gera uma exceção.
Comentários
Se uma tentativa de conversão falhar, CType
e DirectCast
lançam um erro InvalidCastException. Isso pode afetar negativamente o desempenho do aplicativo. TryCast
retorna Nothing, de modo que, em vez de lidar com uma possível exceção, você só precisa testar o resultado retornado em relação a Nothing
.
Você usa a palavra-chave TryCast
semelhante à maneira como usa a Função CType e a palavra-chave Operador DirectCast. Você fornece uma expressão como o primeiro argumento e um tipo para convertê-la como o segundo argumento. O TryCast
opera apenas em tipos de referência, como classes e interfaces. Ele requer uma relação de herança ou implementação entre os dois tipos. Isso significa que um tipo deve herdar de ou implementar o outro.
Erros e falhas
O TryCast
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, TryCast
retornará Nothing.
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 |
Operador DirectCast | Qualquer tipo de dados | Um tipo deve herdar ou implementar o outro tipo | Gera InvalidCastException |
TryCast |
Apenas tipos de referência | Um tipo deve herdar ou implementar o outro tipo | Retorna Nada |
Exemplo
O exemplo a seguir mostra como usar TryCast
.
Function PrintTypeCode(ByVal obj As Object) As String
Dim objAsConvertible As IConvertible = TryCast(obj, IConvertible)
If objAsConvertible Is Nothing Then
Return obj.ToString() & " does not implement IConvertible"
Else
Return "Type code is " & objAsConvertible.GetTypeCode()
End If
End Function