Функции преобразования типов (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 Example .
CChar Тип данных Char Любое допустимое Char или String выражение; преобразуется только первый символ String ; значение может составлять от 0 до 65535 (без знака).
CDate Тип данных Date Любое допустимое представление даты и времени.
CDbl Тип данных Double -1.79769313486231570E+308 до -4.940656454124654E-3244 для отрицательных значений; 4.940656564584124654E-324 до 1.79769313486231570E+308 для положительных значений.
CDec Тип данных Decimal +/-79,228,162,514,264,337 593,543 950,335 для нулевые числа, то есть числа без десятичных разрядов. Для чисел с 28 десятичными разрядами диапазон равен +/-7.9228162514264337593543943950335. Наименьшее возможное ненулевое число — 0,00000000000000000000000001 (+/-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 Example .
CLng Тип данных Long Int64.MinValue (-9 223 372 036 854 775 808) до Int64.MaxValue (9 223 372 036 854 775 807); дробные части округляются.1

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

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

Начиная с Visual Basic 15.8, Visual Basic оптимизирует производительность с плавающей запятой до 16-разрядного целочисленного преобразования с CShort помощью функции; дополнительные сведения см . в разделе "Примечания ". Пример см. в разделе CInt Example .
CSng Тип данных Single -3.402823E+38–1.401298E-45 для отрицательных значений; 1.401298E-45–3.402823E+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 Example .
CULng Тип данных ULong UInt64.MinValue (0) до UInt64.MaxValue (18 446 744 073 709 551 615) (без знака); дробные части округляются.1

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

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

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

Замечания

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

Начиная с Visual Basic 15.8, производительность преобразования с плавающей запятой в целочисленное значение оптимизирована при передаче Single или значению, возвращаемого следующими методами, в одну из функций преобразования целых чисел (CByte, CShort, CIntCSByteCUShortCLngCUInt): CULngDouble

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

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 возникает.

  • Дробные части. При преобразовании неинтегрального значения в целочисленный тип функции преобразования целых чисел (, , , , CUIntCShortCLngCSByteCULng, иCUShort) удалите дробную часть и округлите значение до ближайшего целого числа. CIntCByte

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

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

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

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

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

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

CType Function

Функция CType принимает второй аргумент, typenameи принудит expressiontypenameк тому, где 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

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

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 переменная содержит только четырехбайтовый указатель, указывающий на значение, назначенное 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

В следующем примере функция используется 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

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

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)

В следующем примере функция используется для преобразования Date значений CStr в 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

В следующем примере функция используется 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

В следующем примере функция используется 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

В следующем примере функция используется 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)

См. также