DirectCast

Actualización: noviembre 2007

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

Comentarios

DirectCast no utiliza rutinas auxiliares para conversión de Visual Basic en tiempo de ejecución, por lo que puede proporcionar un mejor rendimiento que CType para convertir al tipos de datos Object y desde él.

Se utiliza la palabra clave DirectCast de la misma manera que se utiliza la palabra clave CType (Función) y TryCast. Se proporciona una expresión como primer argumento y un tipo para convertir como segundo argumento. DirectCast requiere una relación de herencia o de implementación entre los tipos de datos de los dos argumentos. Esto significa que un tipo debe heredar de otro o implementar otro.

Errores y problemas

DirectCast genera un error del compilador si detecta que no existe ninguna relación herencia o de implementación. No obstante, la falta de errores del compilador no garantiza una conversión correcta. Si se restringe la conversión deseada, se podría producir un error en tiempo de ejecución. Si es así, el tiempo de ejecución produce un error InvalidCastException.

Palabras clave para conversiones

A continuación se muestra una comparación de las palabras clave de conversión de tipos.

Palabra clave

Tipos de datos

Relación de argumento

Error en tiempo de ejecución

CType (Función)

Cualquier tipo de datos

La conversión de ampliación o de restricción se debe definir entre los dos tipos de datos

Produce InvalidCastException

DirectCast

Cualquier tipo de datos

Un tipo debe heredarse del otro tipo o implementarlo

Produce InvalidCastException

TryCast

Sólo tipos de referencia

Un tipo debe heredarse del otro tipo o implementarlo

Devuelve Nothing (Visual Basic)

Ejemplo

El ejemplo siguiente muestra dos usos de DirectCast, uno con un resultado satisfactorio en tiempo de ejecución y otro que no lo tiene.

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 en tiempo de ejecución de q es Double. CType tiene un resultado satisfactorio porque Double se puede convertir en Integer. No obstante, el primer DirectCast no tiene un resultado satisfactorio porque el tipo en tiempo de ejecución de Double no tiene relación de herencia con Integer, aunque existe una conversión. El segundo DirectCast tiene un resultado satisfactorio porque convierte del tipo Form al tipo Control del que Form hereda.

Vea también

Conceptos

Conversiones de ampliación y de restricción

Conversiones implícitas y explícitas

Referencia

Convert.ChangeType