Integer.Parse vs. CInt

Básicamente, he estado utilizando tanto Integer.Parse como CInt en la mayoría de mis tareas diarias de progtwigció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?

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 sumr 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 .

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.

Los métodos .Parse se utilizan para extraer un valor del tipo de una cadena que representa el valor (por ejemplo, 2 de “2”). Las funciones C operan en expresiones y devuelven una variante subtitulada a el tipo deseado (por ejemplo, CInt("2") O CInt(SomeDouble + SomeDouble) , etc.).