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.