Pregunta

Desde que me mudé de VB6 a VB.NET algún lugar en el año 2005, he estado usando CType hacer la colada de un tipo de datos a otro. Lo hago porque es simplemente más rápido que escribir, solía existir en VB6 y no sé por qué tengo que estar usando DirectCast si aparentemente no hay diferencia entre ellos.

Yo uso TryCast vez en cuando, porque entiendo que a veces puede fallar fundición. Yo sin embargo no puedo obtener la diferencia entre CType y DirectCast.

Puede alguien decirme la diferencia en la llanura Inglés sencillo lo que la diferencia de los dos (CType y DirectCast)? Adición de ejemplos de dónde utilizar lo que también sería útil.

¿Fue útil?

Solución

TryCast y DirectCast están lanzando los operadores que se asignan directamente al apoyo de la CLR para la fundición. Rápidamente se pueden lanzar un objeto de un tipo base a un tipo derivado o unboxing un valor de un tipo de valor. DirectCast lanza una excepción cuando el elenco no es posible, TryCast devuelve nada si falló. Por lo general, quiere favorecer DirectCast para atrapar errores de programación.

CType permite un superconjunto de las conversiones, los que los ceños CLR sucesivamente. El mejor ejemplo que puedo pensar es la conversión de 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)

Lo que usted tiene que utilizar si Option Strict On está en vigor. Si está apagado, entonces puede hacerlo directamente:

Option Strict Off
...
    Dim dt As DateTime = obj

Muy conveniente y, por supuesto, parte del legado de VB.NET como un lenguaje de tipos dinámicos. Pero no sin problemas, esa fecha es el día del unicornio en stackoverflow.com pero será un día de enero en un británico entra en la cadena. conversiones inesperado es la razón por la que el CLR no permite que éstos directamente. Las explícitas, nunca una conversión sorpresa es similar al siguiente:

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 se programa con Option Strict On entonces definitivamente debe comenzar a usar Try / DirectCast. Si usted a favor de la lengua VB.NET porque le gusta la comodidad de tipado dinámico, entonces no dude en permanecer en CType.

Otros consejos

DirectCast es dos veces más rápido de los tipos de valores (enteros, etc ...), pero idéntico para los tipos de referencia.

Para más información ver las "Funciones de conversión, CType, DirectCast, y System.Convert" en la esta página de MSDN.

página explica bien .

Al leerlo, creo que cuando se utiliza DirectCast, que está seguro de que la conversión funcionará sin estrechamiento o expansión (en este caso, los datos numéricos). Considerando que, CType tratará de convertir a la misma, con el desarrollador de ser conscientes de estrechamiento / expansión.

Por "conversión" media la conversión de un tipo de datos a otro (por ejemplo cadena a número entero, decimal a número entero, objeto de cadena etc).

Por "fundido" significa cambiar de un tipo de objeto en otro tipo que es relacionado con él por una de las siguientes reglas.

http://www.thedevheaven.com/2012/09/ DirectCast-vs-ctype.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top