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?

24
demandé sur Peter Mortensen 2009-01-08 13:38:22

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.

29
répondu Binary Worrier 2017-09-22 10:08:00

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.

4
répondu Drake 2015-08-25 12:32:28

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

-1
répondu cmsjr 2014-12-16 19:24:50