Escriba Casting en Visual Basic. NET

Proporcionado por Molly Pell, Analista Sénior de Sistemas

Visual Basic. NET proporciona dos opciones de casting.

  • CType: Crea o convierte un tipo en otro tipo. Si los tipos no coinciden, se puede ejercer coacción.
  • DirectCast: Lanza un tipo a otro tipo con mejor rendimiento que CType, pero no realiza coerción si los tipos no coinciden.

Nota: CType incluye todas las funciones de conversión de VB. Estos son CBool, CByte, CChar, CDate, CDec, CDbl, CInt, CLng, CObj, CShort, CSng y CStr.

La principal diferencia entre los dos es que DirectCast solo funciona si el tipo especificado y el tipo de tiempo de ejecución de la expresión son los mismos. Esta diferencia solo aparece cuando se convierte de un tipo de objeto a un tipo de valor o cuando se descomprime un valor.

Por ejemplo, la siguiente operación de DirectCast fallará porque el tipo en caja del objeto O no es un entero:

Dim O As Object = 1.5

Dim I As Integer = DirectCast ( O, Integer) ‘ Causa un error en tiempo de ejecución.

Dim I As Integer = CType (O, Integer) ‘ No causa un error en tiempo de ejecución.

La operación de DirectCast en este ejemplo, por otro lado, tendrá éxito:

Dim O As Object = 1

Dim I As Integer = DirectCast(O, Integer) ‘ Tiene Éxito.

Dim I As Integer = CType (O, Integer) ‘ Tiene éxito, pero es más lento que DirectCast

Al convertir de un objeto a un tipo de valor, o unboxing, el operador DirectCast tiene un mejor rendimiento que el operador CType. El Visual Basic .El compilador de red genera cuatro líneas de código IL para DirectCast. Sin embargo, el uso de CType hace que el compilador Visual Basic.NET genere una llamada a un método de conversión que tiene más de cien líneas de código IL. Este método a su vez llama a otros métodos. En el código crítico de rendimiento, la diferencia puede ser sustancial. Sin embargo, si la coerción es necesaria, aún debe usar la operación CType o realizar la coerción manualmente.

Por ejemplo:

Dim O Como Objeto = 1.5

Dim f As Single = DirectCast (O, Single) ‘Cast al tipo de tiempo de ejecución

Dim i As Integer = CType (f, Integer)’ CType está bien aquí, ya que este
‘cast no descomprime ‘f’

Conclusión

Cuando el tipo de fundición de un tipo de objeto a un tipo de valor, o unboxing, primero debe determinar si la coerción de tipo es necesaria. Si no es necesario coerción (es decir, el tipo en caja del valor es el mismo que el tipo especificado en la expresión cast), use la expresión DirectCast para aumentar el rendimiento de la aplicación.

Este consejo y más se detectan para usted con Total. NET Analyzer! Consulte FMS. NET Analyzer para obtener más información.