Lo primero a tener en cuenta es que VB.NET no tiene un análogo directo al mecanismo de fundición (type)instance
de C#. Lo menciono porque es útil utilizarlo como punto de partida para comparar los dos operadores de VB.NET (y son operadores, no funciones, aunque tengan semántica de funciones).
DirectCast()
es más estricto que el operador de fundición C#. Solo le permite emitir cuando el elemento que se va a emitir ya es del tipo al que está enviando. No hará ninguna conversión. Por lo tanto, por ejemplo, no puede convertir de corto a int, como podría hacerlo con un elenco de C# (int)
. Pero puede convertir desde un IEnumerable a una matriz, si su variable de objeto subyacente IEnumerable
es realmente Array
. Y, por supuesto, puede convertir desde Object a cualquier cosa, suponiendo que el tipo de su instancia de objeto está realmente en algún lugar debajo de su tipo de conversión en el árbol de herencia.
Esto es deseable porque hace que sea más rápido. Hay un poco menos de conversión y verificación de tipos que debe llevarse a cabo.
CType()
es menos estricto que el operador de fundición C#. Hará cosas como convertir una cadena en un entero que no se puede hacer simplemente con un molde (int)
. Tiene tanto poder como llamar al Convert.To___()
en C#, donde el ___ es el tipo de destino de tu conversión. Esto es deseable porque es muy potente, pero esa potencia se consigue a costa del rendimiento —, no es tan rápido como DirectCast() o el operador de casting de C# porque puede que haya mucho trabajo por hacer para terminar el reparto.
Por lo general, debe preferir DirectCast()
cuando pueda.
Finalmente, faltó un operador de fundición: TryCast()
, que es un operador análogo directo al de C# as
.
Duplicado exacto de esto * Casting DataTypes con DirectCast, CType, TryCast * http://stackoverflow.com/questions/2703585/casting-datatypes-with-directcast-ctype-trycast – MarkJ
Posible duplicado de [Casting DataTypes with DirectCast, CType, TryCast] (https: // stackoverflow.com/questions/2703585/casting-datatypes-with-directcast-ctype-trycast) – Imad