Lo primero que hay que tener en cuenta es que VB.NET no tiene un análogo directo al (type)instance
mecanismo de conversión de C # . Menciono esto porque es útil como punto de partida para comparar los dos operadores VB.NET (y son operadores, no funciones, aunque tienen semántica de función).
DirectCast()
es más estricto que el operador de conversión de C #. Solo te permite lanzar cuando el elemento que se está lanzando ya es del tipo al que estás lanzando. Creo que aún desempacará los tipos de valor, pero de lo contrario no realizará ninguna conversión. Entonces, por ejemplo, no puede transmitir de short
a int
, como podría hacerlo con un (int)
lanzamiento de C # . Pero puede convertir de una IEnumerable
a una matriz, si su IEnumerable
variable de objeto subyacente realmente es una Array
. Y, por supuesto, puede convertir desde Object
a cualquier cosa, asumiendo que el tipo de su instancia de objeto realmente está en algún lugar por debajo de su tipo de conversión en el árbol de herencia.
Esto es deseable porque es mucho más rápido . Hay menos conversión y verificación de tipos que se deben realizar.
CType()
es menos estricto que el operador de conversión de C #. Hará cosas que no puedes hacer con un (int)
elenco de estilo simple , como convertir una cadena en un número entero. Tiene tanto poder como llamar Convert.To___()
en C #, donde ___
es el tipo de destino de su elenco.
Esto es deseable porque es muy poderoso. Sin embargo, este poder tiene un costo de desempeño; no es tan rápido como el DirectCast()
operador de conversión de C # porque podría necesitar hacer bastante trabajo para terminar la conversión. Por lo general, debería preferir DirectCast()
cuando pueda.
Finalmente, te perdiste un operador de conversión:, TryCast()
que es un análogo directo al as
operador de C # .