Функции преобразования типов (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, например при преобразовании Boolean
Integer
в . Дополнительные сведения см. в разделе "Устранение неполадок типов данных".
Начиная с Visual Basic 15.8, производительность преобразования с плавающей запятой в целочисленное значение оптимизирована при передаче Single или значению, возвращаемого следующими методами, в одну из функций преобразования целых чисел (CByte
, CShort
, CInt
CSByte
CUShort
CLng
CUInt
): CULng
Double
- Conversion.Fix(Double)
- Conversion.Fix(Object)
- Conversion.Fix(Single)
- Conversion.Int(Double)
- Conversion.Int(Object)
- Conversion.Int(Single)
- Math.Ceiling(Double)
- Math.Floor(Double)
- Math.Round(Double)
- Math.Truncate(Double)
Эта оптимизация позволяет коду, который выполняет большое количество целочисленных преобразований, выполняющихся до двух раз быстрее. В следующем примере показаны эти оптимизированные преобразования с плавающей запятой к целым числам:
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 возникает.Дробные части. При преобразовании неинтегрального значения в целочисленный тип функции преобразования целых чисел (, , , ,
CUInt
CShort
CLng
CSByte
CULng
, иCUShort
) удалите дробную часть и округлите значение до ближайшего целого числа.CInt
CByte
Если дробная часть составляет ровно 0,5, то целочисленное преобразование округляет его до ближайшего даже целого числа. Например, 0,5 округляется до 0, а 1,5 и 2,5 округляется до 2. Иногда это называется округлением банкира, и его цель состоит в том, чтобы компенсировать предвзятость, которая может накапливаться при добавлении многих таких чисел вместе.
CInt
иCLng
отличаются от IntFix функций, которые усечены, а не круглые, дробная часть числа. Кроме того,Fix
иInt
всегда возвращает значение того же типа данных, что и при передаче.Преобразования даты и времени. Используйте функцию IsDate , чтобы определить, можно ли преобразовать значение в дату и время.
CDate
распознает литералы даты и временные литералы, но не числовые значения. Чтобы преобразовать значение Visual Basic 6.0Date
в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
и принудит 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
переменная содержит только четырехбайтовый указатель, указывающий на значение, назначенное 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
В следующем примере функция используется для преобразования значений 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)
В следующем примере функция используется для преобразования 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)