vb.net - sirve - Casting DataTypes con DirectCast, CType, TryCast
vb net directcast vs trycast (4)
Desde que me mudé de VB6 a VB.NET en algún lugar en 2005, he estado usando CType para hacer casting de un tipo de datos a otro. Lo hago porque simplemente es más rápido escribir, solía existir en VB6 y no sé por qué tengo que usar DirectCast si aparentemente no hay diferencia entre ellos.
Uso TryCast de vez en cuando porque entiendo que a veces el lanzamiento puede fallar. Sin embargo, no puedo obtener la diferencia entre CType y DirectCast.
¿Alguien puede decirme la diferencia en inglés simple y llano cuál es la diferencia entre los dos (CType y DirectCast)? Agregar ejemplos de dónde usar lo que sería útil sería útil.
DirectCast es dos veces más rápido para los tipos de valor (enteros ... etc.), pero idéntico para los tipos de referencia.
Para obtener más información, consulte la sección "Funciones de conversión, CType, DirectCast y System.Convert" en this página de MSDN.
Esta page explica bien.
Al leerlo, creo que cuando utiliza DirectCast
, está seguro de que la conversión funcionará sin estrechamiento ni expansión (en este caso, datos numéricos). Mientras que, CType
intentará convertirlo, con el desarrollador consciente de estrechamiento / expansión.
Por "conversión" se entiende la conversión de un tipo de datos a otro (por ejemplo, cadena a entero, decimal a entero, objeto a cadena, etc.).
Por "casteo", se entiende el cambio de un tipo de objeto a otro tipo relacionado con él por una de las siguientes reglas.
http://www.thedevheaven.com/2012/09/directcast-vs-ctype.html
TryCast y DirectCast están lanzando operadores que se asignan directamente al soporte del CLR para el casting. Pueden convertir rápidamente un objeto de un tipo base en un tipo derivado o unbox un valor de un tipo de valor. DirectCast arroja una excepción cuando el lanzamiento no es posible, TryCast devuelve Nothing si falla. Por lo general, desea favorecer a DirectCast para detectar errores de programación.
CType permite un superconjunto de conversiones, unas que CLR no ve con buenos ojos. El mejor ejemplo en el que puedo pensar es convertir una cadena en un número o fecha. Por ejemplo:
Dim obj As Object
obj = "4/1/2010"
Dim dt As DateTime = CType(obj, DateTime)
Que tendrá que usar si Option Strict On está en efecto. Si está desactivado, puede hacerlo directamente:
Option Strict Off
...
Dim dt As DateTime = obj
Muy conveniente, por supuesto, y parte del legado de VB.NET como lenguaje de tipado dinámico. Pero no sin problemas, esa fecha es el día de Unicorn en .com, pero será un día de enero cuando un británico entre en la cadena. Las conversiones inesperadas son la razón por la que CLR no permite estas directamente. La conversión explícita, nunca sorprendente, se ve así:
Dim dt As DateTime = DateTime.Parse(obj.ToString(), _
System.Globalization.CultureInfo.GetCultureInfo("en-US").DateTimeFormat)
Si usted debe comprar en Try / DirectCast vs CType vs conversiones explícitas es más bien una elección personal. Si ahora programa con Option Strict On entonces definitivamente debería comenzar a usar Try / DirectCast. Si prefiere el lenguaje VB.NET porque le gusta la conveniencia de la escritura dinámica, no dude en permanecer en CType.