DirectCast (Operador) (Visual Basic)
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 manera similar a como se utiliza la palabra clave CType (Función) (Visual Basic) y TryCast (Operador) (Visual Basic). Proporcione una expresión como primer argumento y el tipo al que se va a convertir como segundo argumento. DirectCastnecesita que exista una relación de herencia o implementación entre los dos tipos de datos de los dos argumentos. Esto significa que un tipo debe heredarse del otro o implementar al otro.
Errores
DirectCast genera un error del compilador si detecta que no existe ninguna relación herencia o de implementación. Sin embargo, la ausencia de un compilador no garantiza que la conversión se realice correctamente. Si la conversión deseada es de restricción, puede producirse 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 incluye una comparación de las palabras clave de conversión de tipos.
Palabra clave |
Tipos de datos |
Relación de argumentos |
Error en tiempo de ejecución |
Cualquier tipo de datos |
La conversión de ampliación o restricción debe definirse entre dos tipos de datos |
Produce InvalidCastException |
|
DirectCast |
Cualquier tipo de datos |
Un tipo debe heredarse del otro tipo o implementarlo |
Produce InvalidCastException |
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 puede convertirse 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.