Entier.Parse vs CInt
Fondamentalement, j'ai utilisé à la fois Integer.Parse
et CInt dans la plupart de mes tâches de programmation quotidiennes, mais je suis un peu confus de la différence entre les deux.
Quelle est la différence entre Integer.Parse
et CInt
dans VB.NET?
3 réponses
CInt
un ensemble beaucoup plus que Integer.Parse
.
CInt
vérifiera d'abord si ce qu'il a été passé est un entier, puis le lancera simplement et le retournera. Si c'est un double, il essaiera de le convertir sans d'abord convertir le double en une chaîne.
Voir ceci à partir de l'aide pour CInt
et d'autres fonctions de Conversion de Type
Parties Fractionnaires. Lorsque vous convertissez un valeur non intégrale à un type intégral, les fonctions de conversion d'entiers (CByte, CInt, CLng, CSByte, CShort, CUInt, CULng et CUShort) retirez le partie fractionnaire et arrondir la valeur à l'entier le plus proche.
Si la partie fractionnaire est exactement 0.5, les fonctions de conversion d'entiers rondes au plus proche nombre entier pair. Pour exemple, 0.5 tours à 0, et 1.5 et 2.5 les deux rondes à 2. Ceci est parfois appelé arrondi du banquier, et son le but est de compenser un écart qui pourrait s'accumuler lors de l'ajout de de tels chiffres ainsi.
Donc, en bref, il fait beaucoup plus que convertir une chaîne en un entier, par exemple en appliquant des règles d'arrondi spécifiques aux fractions, en court-circuitant des conversions inutiles, etc.
, Si ce que vous faites est de convertir une chaîne en un entier, l'utilisation Integer.Parse
(ou Integer.TryParse
), si vous êtes contraint une valeur inconnue (par exemple, un variant
ou object
à partir d'une base de données) pour un entier, utilisez CInt
.
En regardant avec ILDASM à un exemple de code, vous pouvez voir que CInt est converti en cet appel:
Microsoft.VisualBasic] Microsoft.VisualBasic.CompilerServices.Conversions:: ToInteger (chaîne)
Utiliser .NET Réflecteur, vous pouvez extraire ce morceau de code:
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
, Vous pouvez voir qu'en interne il appelle Conversions.ParseDouble .
Par conséquent, comme déjà expliqué par Worrier binaire, utilisez Integer.Parse pour la contrainte de chaîne et CInt seulement pour la coulée.
Les méthodes <Data Type>.Parse
sont utilisées pour extraire une valeur du type d'une chaîne qui représente la valeur (par exemple 2 à partir de "2") les fonctions C<Data Type>
fonctionnent sur des expressions et renvoient une variante sous-typée au type désiré (par exemple CInt("2")
ou CInt(SomeDouble + SomeDouble)
, etc.).