trycast sirve que para net ejemplos vb.net ctype directcast

vb.net - sirve - trycast vb net



Diferencia entre DirectCast() y CType() en VB.NET (3)

Soy un programador con experiencia en C / C ++ / C # que acaba de ingresar a VB.NET. Generalmente utilizo CType (y CInt, CBool, CStr) para los moldes porque tiene menos caracteres y fue la primera forma de fundición a la que fui expuesto, pero también conozco DirectCast y TryCast.

Simplemente, ¿hay alguna diferencia (efecto de reparto, rendimiento, etc.) entre DirectCast y CType? Entiendo la idea de TryCast.


Con CType puedes escribir algo como este Ctype("string",Integer) . Pero con DirectCast la declaración anterior daría error de tiempo de compilación.

Dim a As Integer = DirectCast("1", Integer) ''Gives compiler error Dim b As Integer = CType("1", Integer) ''Will compile


DirectCast es mucho más restrictivo que CType. Por ejemplo,

Sub Main() Dim newint As Integer = DirectCast(3345.34, Integer) Console.WriteLine(newint) Console.ReadLine() End Sub

arroja un error. se muestra en el estudio visual IDE también. Pero

Sub Main() Dim newint As Integer = CType(3345.34, Integer) Console.WriteLine(newint) Console.ReadLine() End Sub

No arroja un error


Lo primero a tener en cuenta es que VB.NET no tiene un mecanismo de conversión de (type)instance análogo directo al de C # (type)instance . 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 colada C #. Solo te permite lanzar cuando el elemento que se está lanzando ya es del tipo al que estás lanzando. 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 subyacente de objeto IEnumerable realmente es una 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 eso lo hace 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 colada 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 a Convert.To___() en C #, donde el ___ es el tipo de objetivo de tu elenco. Esto es deseable porque es muy poderoso, 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.

En general, debería preferir DirectCast() cuando pueda.

Finalmente, TryCast() un operador de casting: TryCast() , que es un análogo directo a C # as operador.