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, TryCastretornará 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

Confira também