vb.net - texto - vb cstr function
Integer.Parse vs. CInt (3)
Básicamente, he estado utilizando tanto Integer.Parse
como CInt en la mayoría de mis tareas diarias de programación, pero estoy un poco confundido de cuál es la diferencia entre los dos.
¿Cuál es la diferencia entre Integer.Parse
y CInt
en VB.NET?
Los métodos <Data Type>.Parse
se utilizan para extraer un valor del tipo de una cadena que representa el valor (por ejemplo, 2 de "2"). Las funciones C<Data Type>
operan en expresiones y devuelven una variante subtitulada a el tipo deseado (por ejemplo, CInt("2")
O CInt(SomeDouble + SomeDouble)
, etc.).
Si mira con ILDASM en algún código de muestra, puede ver que CInt se convierte en esta llamada:
Microsoft.VisualBasic] Microsoft.VisualBasic.CompilerServices.Conversions :: ToInteger (cadena)
Usando .NET Reflector , puedes extraer este fragmento de código:
Public Shared Function ToInteger(ByVal Value As String) As Integer
Dim num As Integer
If (Value Is Nothing) Then
Return 0
End If
Try
Dim num2 As Long
If Utils.IsHexOrOctValue(Value, (num2)) Then
Return CInt(num2)
End If
num = CInt(Math.Round(Conversions.ParseDouble(Value)))
Catch exception As FormatException
Throw New InvalidCastException(Utils.GetResourceString("InvalidCast_FromStringTo", New String() { Strings.Left(Value, &H20), "Integer" }), exception)
End Try
Return num
End Function
Puede ver que internamente llama Conversiones.ParseDouble .
Por lo tanto, como ya explicó Binary Worrier, use Integer.Parse para coerción de cadena y CInt solo para conversión.
CInt
hace mucho más que Integer.Parse
.
CInt
primero verificará si lo que se pasó es un número entero, y luego simplemente lo arroja y lo devuelve. Si es un duplicado, intentará convertirlo sin convertir primero el doble en una cadena.
Ver esto desde la ayuda para CInt
y otras funciones de conversión de tipo
Partes fraccionales. Cuando convierte un valor no integral en un tipo integral, las funciones de conversión enteras (CByte, CInt, CLng, CSByte, CShort, CUInt, CULng y CUShort) eliminan la parte fraccionaria y redondean el valor al entero más cercano.
Si la parte fraccionaria es exactamente 0.5, las funciones de conversión enteras lo redondean al entero par más cercano. Por ejemplo, 0.5 redondea a 0, y 1.5 y 2.5 redondean a 2. Esto a veces se denomina redondeo bancario, y su propósito es compensar un sesgo que podría acumularse al sumar muchos de esos números.
En resumen, hace mucho más que convertir una cadena en un entero, por ejemplo, aplicando reglas de redondeo específicas a fracciones, conversiones innecesarias de cortocircuito, etc.
Si lo que estás haciendo es convertir una cadena en un entero, usa Integer.Parse
(o Integer.TryParse
), si estás forzando un valor desconocido (por ejemplo, una variant
u object
de una base de datos) a un entero, usa CInt
.