DirectCast (Operador) (Visual Basic)

Presenta una operación de conversión de tipos basada en la herencia o implementación.

Comentarios

DirectCast no usa las rutinas del asistente en tiempo de ejecución de Visual Basic para la conversión, por lo que puede brindar un rendimiento algo mejor que CType al convertir en y desde el tipo de datos Object.

La palabra clave DirectCast se usa de manera similar a cómo usa la palabra clave de la función CType y del operador TryCast. Se proporciona una expresión como primer argumento y un tipo en el que convertirla como segundo argumento. DirectCast requiere una relación de herencia o implementación entre los tipos de datos de ambos argumentos. Esto significa que un tipo debe heredar del otro o implementarlo.

Errores

DirectCast genera un error del compilador si detecta que no existe ninguna relación de herencia o implementación. Pero la ausencia de un error del compilador no garantiza una conversión correcta. Si la conversión deseada se está restringiendo, podría producir un error en tiempo de ejecución. Si esto sucede, el tiempo de ejecución genera un error InvalidCastException.

Palabras clave para conversiones

Una comparación de las palabras clave de conversión de tipos es la siguiente.

Palabra clave Tipos de datos Relación de argumento Error en tiempo de ejecución
CType Function Todos los tipos de datos La conversión de ampliación o restricción debe definirse entre los dos tipos de datos Genera InvalidCastException
DirectCast Todos los tipos de datos Un tipo debe heredar del otro o implementarlo Genera InvalidCastException
Operador TryCast Solo los tipos de referencia Un tipo debe heredar del otro o implementarlo Devuelve Nothing

Ejemplo

En el ejemplo siguiente, se muestran dos usos de DirectCast, uno que genera un error en tiempo de ejecución y otro que se ejecuta correctamente.

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)

En el ejemplo anterior, el tipo de tiempo de ejecución de q es Double. CType se ejecuta correctamente porque Double se puede convertir en Integer. Sin embargo, el primer DirectCast genera un error en tiempo de ejecución porque el tipo de tiempo de ejecución de Double no tiene ninguna relación de herencia con Integer, aunque exista una conversión. El segundo DirectCast se ejecuta correctamente porque realiza la conversión del tipo Form en el tipo Control, del que Form hereda.

Consulte también