Подтвердить что ты не робот

Integer.Parse vs. CInt

В основном, я использовал как Integer.Parse, так и CInt в большинстве своих ежедневных задач программирования, но я немного смущен от того, какая разница между ними.

В чем разница между Integer.Parse и CInt в VB.NET?

4b9b3361

Ответ 1

CInt делает намного больше, чем Integer.Parse.

CInt сначала проверяет, является ли то, что было передано, целое число, а затем просто бросает его и возвращает. Если он будет двойным, он попытается преобразовать его, не преобразовывая дважды в строку.

См. это из справки для CInt и других Функции преобразования типов

Дробные части. Когда вы конвертируете неинтегральное значение интегральному типу, целочисленные функции преобразования (CByte, CInt, CLng, CSByte, CShort, CUInt, CULng и CUShort) удалите дробная часть и округлить значение до ближайшего целого числа.

Если дробная часть равна 0,5, функции целочисленного преобразования это до ближайшего четного целого. Для например, 0,5 раунда до 0 и 1,5 и 2.5 оба раунда до 2. Это иногда называют округлением банкира, а его Цель состоит в том, чтобы компенсировать смещение которые могут накапливаться при добавлении многих такие числа вместе.

Короче говоря, он делает гораздо больше, чем преобразование строки в целое число, например. применение определенных правил округления к фракциям, короткое обращение ненужных преобразований и т.д.

Если то, что вы делаете, преобразует строку в целое число, используйте Integer.Parse (или Integer.TryParse), если вы принудительно вводите неизвестное значение (например, variant или object из базы данных) в целое число, используйте CInt.

Ответ 2

Глядя на ILDASM на каком-то примерном коде, вы можете видеть, что CInt преобразуется в этот вызов:

Microsoft.VisualBasic] Microsoft.VisualBasic.CompilerServices.Conversions:: ToInteger (строка)

Используя .NET Reflector, вы можете извлечь этот фрагмент кода:

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

Вы можете видеть, что внутри он вызывает Конверсии .ParseDouble.

Поэтому, как уже объяснялось Binary Worrier, используйте Integer.Parse для принудительного ввода строк и CInt только для кастинга.

Ответ 3

Методы <Data Type>.Parse используются для извлечения значения типа из строки, которая представляет значение (например, 2 из "2" ). Функции C<Data Type> работают с выражениями и возвращают вариант, вводимый в соответствии с желаемым (например, CInt("2") OR CInt(SomeDouble + SomeDouble) и т.д.).