Функции преобразования типов (Visual Basic)

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

Синтаксис

CBool(expression)
CByte(expression)
CChar(expression)
CDate(expression)
CDbl(expression)
CDec(expression)
CInt(expression)
CLng(expression)
CObj(expression)
CSByte(expression)
CShort(expression)
CSng(expression)
CStr(expression)
CUInt(expression)
CULng(expression)
CUShort(expression)

Часть

expression
Обязательный элемент. Любое выражение исходного типа данных.

Тип данных возвращаемого значения

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

Имя функции Тип возвращаемых данных Диапазон для expression аргумента
CBool Логический тип данных Любое допустимое Char или String числовое выражение.
CByte Тип данных Byte Byte.MinValue (от 0) до Byte.MaxValue (255) (без знака); дробные части округляются. 1

начиная с Visual Basic 15,8 Visual Basic оптимизирует производительность преобразования с плавающей запятой в байтовую CByte функцию. дополнительные сведения см. в разделе "примечания" . Пример см. в разделе пример для функции CInt .
CChar Тип данных Char Любое допустимое Char String выражение или; преобразуется только первый символ String ; значение может быть от 0 до 65535 (без знака).
CDate Тип данных Date Любое допустимое представление даты и времени.
CDbl Тип данных Double -1.79769313486231570 e + 308 до-4.94065645841246544 E-324 для отрицательных значений; 4.94065645841246544 e-324 до 1.79769313486231570 E + 308 для положительных значений.
CDec Тип данных Decimal +/-79,228,162,514,264,337,593,543,950,335 для чисел с нулевым масштабом, то есть чисел без десятичных разрядов. Для чисел с 28 десятичными разрядами диапазоном является +/-7.9228162514264337593543950335. Наименьшее возможное ненулевое число — 0,0000000000000000000000000001 (+/-1E-28).
CInt Тип данных Integer Int32.MinValue (от-2 147 483 648) до Int32.MaxValue (2 147 483 647); дробные части округляются. 1

начиная с Visual Basic 15,8 Visual Basic оптимизирует производительность преобразования с плавающей запятой в целое с помощью CInt функции. дополнительные сведения см. в разделе "примечания ". Пример см. в разделе пример для функции CInt .
CLng Тип данных Long Int64.MinValue (от-9223372036854775808) до Int64.MaxValue (9 223 372 036 854 775 807); дробные части округляются. 1

начиная с Visual Basic 15,8 Visual Basic оптимизирует производительность преобразования с плавающей запятой в 64-разрядное целое число с помощью CLng функции; дополнительные сведения см. в разделе "примечания" . Пример см. в разделе пример для функции CInt .
CObj Object Data Type Любое допустимое выражение.
CSByte Тип данных SByte SByte.MinValue (от-128) до SByte.MaxValue (127); дробные части округляются. 1

начиная с Visual Basic 15,8, Visual Basic оптимизирует производительность преобразования байтов с плавающей запятой в функцию с помощью CSByte функции. дополнительные сведения см. в разделе "примечания" . Пример см. в разделе пример для функции CInt .
CShort Тип данных Short Int16.MinValue (от-32 768) до Int16.MaxValue (32 767); дробные части округляются. 1

начиная с Visual Basic 15,8 Visual Basic оптимизирует производительность преобразования с плавающей запятой в 16-разрядное целое с помощью CShort функции. дополнительные сведения см. в разделе "примечания" . Пример см. в разделе пример для функции CInt .
CSng Тип данных Single -3.402823 e + 38 – 1.401298 E-45 для отрицательных значений; 1.401298 e-45 до 3.402823 E + 38 для положительных значений.
CStr Тип данных String Для CStr зависит от expression аргумента. См. раздел возвращаемые значения для функции CStr.
CUInt Тип данных UInteger UInt32.MinValue (от 0) до UInt32.MaxValue (4 294 967 295) (без знака); дробные части округляются. 1

начиная с Visual Basic 15,8 Visual Basic оптимизирует производительность преобразования с плавающей запятой в целое число без знака с помощью CUInt функции. дополнительные сведения см. в разделе "примечания" . Пример см. в разделе пример для функции CInt .
CULng Тип данных ULong UInt64.MinValue (от 0) до UInt64.MaxValue (18446744073709551615) (без знака); дробные части округляются. 1

начиная с Visual Basic 15,8, Visual Basic оптимизирует производительность преобразования с плавающей запятой в функцию длинного целого числа без знака с помощью CULng функции. дополнительные сведения см. в разделе "примечания" . Пример см. в разделе пример для функции CInt .
CUShort Тип данных UShort UInt16.MinValue (от 0) до UInt16.MaxValue (65 535) (без знака); дробные части округляются. 1

начиная с Visual Basic 15,8, Visual Basic оптимизирует производительность преобразования 16-разрядного целого числа без знака с плавающей запятой в CUShort функцию. дополнительные сведения см. в разделе "примечания" . Пример см. в разделе пример для функции CInt .

1 дробная часть может подвергаться специальному типу округления, называемому банковским округлением. Дополнительные сведения см. в разделе "Примечания".

Комментарии

как правило, следует использовать функции преобразования типа Visual Basic в качестве предпочтений для методов платформа .NET Framework, таких как ToString() , в Convert классе или в отдельной структуре типа или классе. функции Visual Basic предназначены для оптимального взаимодействия с Visual Basicным кодом, а также для сокращения исходного кода и упрощения его чтения. кроме того, методы преобразования платформа .NET Framework не всегда дают те же результаты, что и функции Visual Basic, например при преобразовании Boolean в Integer . Дополнительные сведения см. в разделе Устранение неполадок типов данных.

начиная с Visual Basic 15,8, производительность преобразования с плавающей запятой в целое число оптимизируется при передаче Single значения или, Double возвращаемого следующими методами, в одну из целочисленных функций преобразования (,,,,,, CByte CShort CInt CLng CSByte CUShort CUInt , CULng ):

Такая оптимизация позволяет выполнять код, выполняющий большое количество целочисленных преобразований, в два раза быстрее. В следующем примере демонстрируются эти оптимизированные преобразования с плавающей запятой в целые числа:

Dim s As Single = 173.7619
Dim d As Double = s

Dim i1 As Integer = CInt(Fix(s))               ' Result: 173
Dim b1 As Byte = CByte(Int(d))                 ' Result: 173
Dim s1 AS Short = CShort(Math.Truncate(s))     ' Result: 173
Dim i2 As Integer = CInt(Math.Ceiling(d))      ' Result: 174
Dim i3 As Integer = CInt(Math.Round(s))        ' Result: 174

Поведение

  • Приведение. В общем случае можно использовать функции преобразования типов данных для приведения результата операции к конкретному типу данных, а не по типу данных по умолчанию. Например, используйте CDec для принудительного выполнения десятичных арифметических операций в случаях, когда обычно выполняется операция с одиночной точностью, двойной точностью или целочисленной.

  • Неудачные преобразования. Если expression переданный функции объект находится вне диапазона типа данных, в который она должна быть преобразована, OverflowException возникает исключение.

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

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

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

  • Преобразования даты и времени. Используйте IsDate функцию, чтобы определить, можно ли преобразовать значение в дату и время. CDate распознает литералы даты и литералы времени, но не числовые значения. чтобы преобразовать значение Visual Basic 6,0 в Date Date значение в Visual Basic 2005 или более поздней версии, можно использовать DateTime.FromOADate метод.

  • Нейтральные значения даты и времени. Тип данных Date всегда содержит сведения о дате и времени. в целях преобразования типов Visual Basic учитывает 1/1/0001 (1 января 1 года) как нейтральное значение для даты, а 00:00:00 (полночь) — как нейтральное значение времени. При преобразовании Date значения в строку не CStr включает нейтральные значения в результирующую строку. Например, если преобразовать #January 1, 0001 9:30:00# в строку, то результатом будет "9:30:00 AM"; сведения о дате подавляются. Однако сведения о дате по-прежнему содержатся в исходном Date значении и могут быть восстановлены с помощью таких функций, как DatePart Function.

  • Чувствительность языка и региональных параметров. Функции преобразования типов, включающие строки, выполняют преобразования в соответствии с текущими параметрами языка и региональных параметров для приложения. Например, CDate распознает форматы даты в соответствии с настройками языкового стандарта системы. Необходимо указать день, месяц и год в правильном порядке для вашего языкового стандарта, иначе Дата может интерпретироваться неправильно. Длинный формат даты не распознается, если он содержит строку дня недели, например "среда".

    если необходимо преобразовать в строковое представление значения или из него в формате, отличном от указанного в вашем языковом стандарте, то нельзя использовать функции преобразования типа Visual Basic. Для этого используйте ToString(IFormatProvider) Parse(String, IFormatProvider) методы и типа этого значения. Например, используйте Double.Parse при преобразовании строки в Double и используйте Double.ToString при преобразовании значения типа Double в строку.

CType Function

Функция CType принимает второй аргумент, typename и expression typename typename применяет к, где может быть любым типом данных, структурой, классом или интерфейсом, к которому существует допустимое преобразование.

Сравнение CType с другими ключевыми словами преобразования типов см. в разделе Оператор DirectCast и Оператор TryCast.

Пример CBool

В следующем примере функция используется CBool для преобразования выражений в Boolean значения. Если результат выражения равен ненулевому значению, CBool True функция возвращает; в противном случае возвращается значение False .

Dim a, b, c As Integer
Dim check As Boolean
a = 5
b = 5
' The following line of code sets check to True.
check = CBool(a = b)
c = 0
' The following line of code sets check to False.
check = CBool(c)

Пример CByte

В следующем примере функция используется CByte для преобразования выражения в Byte .

Dim aDouble As Double
Dim aByte As Byte
aDouble = 125.5678
' The following line of code sets aByte to 126.
aByte = CByte(aDouble)

Пример CChar

В следующем примере функция используется CChar для преобразования первого символа String выражения в Char тип.

Dim aString As String
Dim aChar As Char
' CChar converts only the first character of the string.
aString = "BCD"
' The following line of code sets aChar to "B".
aChar = CChar(aString)

Входной аргумент CChar должен иметь тип данных Char или String . Нельзя использовать CChar для преобразования числа в символ, поскольку CChar не может принимать числовые типы данных. В следующем примере получается число, представляющее кодовую точку (код символа), и преобразуется в соответствующий символ. Она использует InputBox функцию для получения строки разрядов, CInt преобразования строки в тип Integer и ChrW для преобразования числа в тип Char .

Dim someDigits As String
Dim codePoint As Integer
Dim thisChar As Char
someDigits = InputBox("Enter code point of character:")
codePoint = CInt(someDigits)
' The following line of code sets thisChar to the Char value of codePoint.
thisChar = ChrW(codePoint)

Пример для CDate

В следующем примере функция используется CDate для преобразования строк в Date значения. Обычно не рекомендуется жестко кодировать даты и время в виде строк (как показано в этом примере). Вместо этого используйте литералы даты и временные литералы, например #Feb 12, 1969 # и #4:45:23 PM #.

Dim aDateString, aTimeString As String
Dim aDate, aTime As Date
aDateString = "February 12, 1969"
aTimeString = "4:35:47 PM"
' The following line of code sets aDate to a Date value.
aDate = CDate(aDateString)
' The following line of code sets aTime to Date value.
aTime = CDate(aTimeString)

Пример с CDbl

Dim aDec As Decimal
Dim aDbl As Double
' The following line of code uses the literal type character D to make aDec a Decimal.
aDec = 234.456784D
' The following line of code sets aDbl to 1.9225456288E+1.
aDbl = CDbl(aDec * 8.2D * 0.01D)

Пример CDec

В следующем примере функция используется CDec для преобразования числового значения в Decimal .

Dim aDouble As Double
Dim aDecimal As Decimal
aDouble = 10000000.0587
' The following line of code sets aDecimal to 10000000.0587.
aDecimal = CDec(aDouble)

Пример функции CInt

В следующем примере функция используется CInt для преобразования значения в Integer .

Dim aDbl As Double
Dim anInt As Integer
aDbl = 2345.5678
' The following line of code sets anInt to 2346.
anInt = CInt(aDbl)

Пример с CLng

В следующем примере функция используется CLng для преобразования значений в Long .

Dim aDbl1, aDbl2 As Double
Dim aLng1, aLng2 As Long
aDbl1 = 25427.45
aDbl2 = 25427.55
' The following line of code sets aLng1 to 25427.
aLng1 = CLng(aDbl1)
' The following line of code sets aLng2 to 25428.
aLng2 = CLng(aDbl2)

Пример CObj

В следующем примере функция используется CObj для преобразования числового значения в Object . ObjectСама переменная содержит только 4-байтовый указатель, указывающий на Double присвоенное ему значение.

Dim aDouble As Double
Dim anObject As Object
aDouble = 2.7182818284
' The following line of code sets anObject to a pointer to aDouble.
anObject = CObj(aDouble)

Пример Ксбите

В следующем примере функция используется CSByte для преобразования числового значения в SByte .

Dim aDouble As Double
Dim anSByte As SByte
aDouble = 39.501
' The following line of code sets anSByte to 40.
anSByte = CSByte(aDouble)

Пример CShort

В следующем примере функция используется CShort для преобразования числового значения в Short .

Dim aByte As Byte
Dim aShort As Short
aByte = 100
' The following line of code sets aShort to 100.
aShort = CShort(aByte)

Пример CSng

В следующем примере функция используется CSng для преобразования значений в Single .

Dim aDouble1, aDouble2 As Double
Dim aSingle1, aSingle2 As Single
aDouble1 = 75.3421105
aDouble2 = 75.3421567
' The following line of code sets aSingle1 to 75.34211.
aSingle1 = CSng(aDouble1)
' The following line of code sets aSingle2 to 75.34216.
aSingle2 = CSng(aDouble2)

Пример функции CStr

В следующем примере функция используется CStr для преобразования числового значения в String .

Dim aDouble As Double
Dim aString As String
aDouble = 437.324
' The following line of code sets aString to "437.324".
aString = CStr(aDouble)

В следующем примере функция используется CStr для преобразования Date значений в String значения.

Dim aDate As Date
Dim aString As String
' The following line of code generates a COMPILER ERROR because of invalid format.
' aDate = #February 12, 1969 00:00:00#
' Date literals must be in the format #m/d/yyyy# or they are invalid.
' The following line of code sets the time component of aDate to midnight.
aDate = #2/12/1969#
' The following conversion suppresses the neutral time value of 00:00:00.
' The following line of code sets aString to "2/12/1969".
aString = CStr(aDate)
' The following line of code sets the time component of aDate to one second past midnight.
aDate = #2/12/1969 12:00:01 AM#
' The time component becomes part of the converted value.
' The following line of code sets aString to "2/12/1969 12:00:01 AM".
aString = CStr(aDate)

CStr всегда отображает Date значение в стандартном коротком формате для текущего языкового стандарта, например "6/15/2003 4:35:47 PM". Однако CStr подавляет нейтральные значения 1/1/0001 для даты и 00:00:00 для времени.

Дополнительные сведения о значениях, возвращаемых CStr , см. в разделе возвращаемые значения функции CStr.

Пример Куинт

В следующем примере функция используется CUInt для преобразования числового значения в UInteger .

Dim aDouble As Double
Dim aUInteger As UInteger
aDouble = 39.501
' The following line of code sets aUInteger to 40.
aUInteger = CUInt(aDouble)

Пример Кулнг

В следующем примере функция используется CULng для преобразования числового значения в ULong .

Dim aDouble As Double
Dim aULong As ULong
aDouble = 39.501
' The following line of code sets aULong to 40.
aULong = CULng(aDouble)

Пример Кушорт

В следующем примере функция используется CUShort для преобразования числового значения в UShort .

Dim aDouble As Double
Dim aUShort As UShort
aDouble = 39.501
' The following line of code sets aUShort to 40.
aUShort = CUShort(aDouble)

См. также