Convert. To Int32 Method
Definition
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Converts a specified value to a 32-bit signed integer.
Overloads
Converts the specified string representation of a number to an equivalent 32-bit signed integer.
Converts the value of the specified 16-bit unsigned integer to the equivalent 32-bit signed integer.
Converts the value of the specified 32-bit unsigned integer to an equivalent 32-bit signed integer.
Converts the value of the specified single-precision floating-point number to an equivalent 32-bit signed integer.
Converts the value of the specified object to a 32-bit signed integer, using the specified culture-specific formatting information.
Converts the specified string representation of a number to an equivalent 32-bit signed integer, using the specified culture-specific formatting information.
Converts the string representation of a number in a specified base to an equivalent 32-bit signed integer.
Converts the value of the specified 64-bit unsigned integer to an equivalent 32-bit signed integer.
Converts the value of the specified object to a 32-bit signed integer.
Converts the value of the specified 8-bit signed integer to the equivalent 32-bit signed integer.
Converts the value of the specified 64-bit signed integer to an equivalent 32-bit signed integer.
Returns the specified 32-bit signed integer; no actual conversion is performed.
Converts the value of the specified 16-bit signed integer to an equivalent 32-bit signed integer.
Converts the value of the specified double-precision floating-point number to an equivalent 32-bit signed integer.
Converts the value of the specified decimal number to an equivalent 32-bit signed integer.
Calling this method always throws InvalidCastException.
Converts the value of the specified Unicode character to the equivalent 32-bit signed integer.
Converts the value of the specified 8-bit unsigned integer to the equivalent 32-bit signed integer.
Converts the specified Boolean value to the equivalent 32-bit signed integer.
ToInt32(String)
Converts the specified string representation of a number to an equivalent 32-bit signed integer.
Parameters
A string that contains the number to convert.
Returns
Exceptions
value does not consist of an optional sign followed by a sequence of digits (0 through 9).
value represents a number that is less than MinValue or greater than MaxValue.
Examples
The following example attempts to convert each element in a numeric string array to an integer.
Remarks
Using the ToInt32(String) method is equivalent to passing value to the Int32.Parse(String) method. value is interpreted by using the formatting conventions of the current thread culture.
If you prefer not to handle an exception if the conversion fails, you can call the Int32.TryParse method instead. It returns a Boolean value that indicates whether the conversion succeeded or failed.
Applies to
ToInt32(UInt16)
This API is not CLS-compliant.
Converts the value of the specified 16-bit unsigned integer to the equivalent 32-bit signed integer.
Parameters
The 16-bit unsigned integer to convert.
Returns
Examples
The following example converts each element in an array of 16-bit unsigned integers to an integer.
Applies to
ToInt32(UInt32)
This API is not CLS-compliant.
Converts the value of the specified 32-bit unsigned integer to an equivalent 32-bit signed integer.
Parameters
The 32-bit unsigned integer to convert.
Returns
Exceptions
value is greater than MaxValue.
Examples
The following example attempts to convert each element in an array of unsigned integers to a signed integer.
Applies to
ToInt32(Single)
Converts the value of the specified single-precision floating-point number to an equivalent 32-bit signed integer.
Parameters
The single-precision floating-point number to convert.
Returns
Exceptions
value is greater than MaxValue or less than MinValue.
Examples
The following example attempts to convert each element in an array of Single values to an integer.
See also
Applies to
ToInt32(Object, IFormatProvider)
Converts the value of the specified object to a 32-bit signed integer, using the specified culture-specific formatting information.
Parameters
An object that implements the IConvertible interface.
An object that supplies culture-specific formatting information.
Returns
Exceptions
value is not in an appropriate format.
value does not implement IConvertible.
value represents a number that is less than MinValue or greater than MaxValue.
Examples
The following example defines a class that implements IConvertible and a class that implements IFormatProvider. Objects of the class that implements IConvertible hold an array of Double values. An object of each class is passed to the ToInt32 method. This method returns an average of the array of Double values, using the object that implements IFormatProvider to determine how to calculate the average.
Remarks
The base types ignore provider ; however, the parameter may be used if value is a user-defined type that implements the IConvertible interface.
Applies to
ToInt32(String, IFormatProvider)
Converts the specified string representation of a number to an equivalent 32-bit signed integer, using the specified culture-specific formatting information.
Parameters
A string that contains the number to convert.
An object that supplies culture-specific formatting information.
Returns
Exceptions
value does not consist of an optional sign followed by a sequence of digits (0 through 9).
value represents a number that is less than MinValue or greater than MaxValue.
Examples
The following example defines a custom NumberFormatInfo object that recognizes the string «pos» as the positive sign and the string «neg» as the negative sign. It then attempts to convert each element of a numeric string array to an integer using both this provider and the NumberFormatInfo provider for the invariant culture.
Remarks
If you prefer not to handle an exception if the conversion fails, you can call the Int32.TryParse method instead. It returns a Boolean value that indicates whether the conversion succeeded or failed.
Applies to
ToInt32(String, Int32)
Converts the string representation of a number in a specified base to an equivalent 32-bit signed integer.
Parameters
A string that contains the number to convert.
Returns
Exceptions
fromBase is not 2, 8, 10, or 16.
value represents a number that is less than MinValue or greater than MaxValue.
Remarks
If fromBase is 16, you can prefix the number specified by the value parameter with «0x» or «0X».
When performing binary operations or numeric conversions, it is always the responsibility of the developer to verify that a method is using the appropriate numeric representation to interpret a particular value. As the following example illustrates, you can ensure that the method handles overflows appropriately by first retrieving the sign of the numeric value before converting it to its hexadecimal string representation. Throw an exception if the original value was positive but the conversion back to an integer yields a negative value.
Convert. To UInt32 Метод
Определение
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Преобразует заданное значение в 32-битовое целое число без знака.
Перегрузки
Преобразует значение заданного числа с плавающей запятой одиночной точности в эквивалентное 32-битовое целое число без знака.
Преобразует заданное строковое представление числа в эквивалентное 32-битовое целое число без знака, учитывая указанные сведения об особенностях форматирования, связанных с языком и региональными параметрами.
Преобразует строковое представление числа с указанным основанием системы счисления в эквивалентное ему 32-битовое целое число без знака.
Преобразует значение заданного объекта в эквивалентное 32-битовое целое число без знака, используя указанные сведения об особенностях форматирования, связанных с языком и региональными параметрами.
Преобразует значение заданного 64-разрядного целого числа без знака в эквивалентное 32-разрядное целое число без знака.
Возвращает заданное 32-битовое целое число без знака; фактическое преобразование не производится.
Преобразует значение заданного 16-битового целого числа без знака в эквивалентное 32-битовое целое число без знака.
Преобразует заданное строковое представление числа в эквивалентное 32-битовое целое число без знака.
Преобразует значение заданного 8-битового целого числа со знаком в эквивалентное 32-битовое целое число без знака.
Преобразует значение заданного 8-битового целого числа без знака в эквивалентное 32-битовое целое число без знака.
Преобразует значение заданного 64-битового целого числа со знаком в эквивалентное 32-битовое целое число без знака.
Преобразует значение заданного 32-битового целого числа со знаком в эквивалентное 32-битовое целое число без знака.
Преобразует значение заданного 16-битового целого числа со знаком в эквивалентное 32-битовое целое число без знака.
Преобразует значение заданного числа с плавающей запятой двойной точности в эквивалентное 32-битовое целое число без знака.
Преобразует значение заданного десятичного числа в эквивалентное 32-битовое целое число без знака.
При вызове этого метода всегда возникает исключение InvalidCastException.
Преобразует значение заданного символа Юникода в эквивалентное 32-битовое целое число без знака.
Преобразует заданное логическое значение в эквивалентное 32-битовое целое число без знака.
Преобразует значение заданного объекта в 32-битовое целое число без знака.
ToUInt32(Single)
Этот API несовместим с CLS.
Преобразует значение заданного числа с плавающей запятой одиночной точности в эквивалентное 32-битовое целое число без знака.
Параметры
Число с плавающей запятой одиночной точности, которое нужно преобразовать.
Возвращаемое значение
Исключения
value меньше нуля или больше MaxValue.
Примеры
В следующем примере предпринимается попытка преобразовать каждый элемент массива Single значений в целое число без знака.
См. также раздел
Применяется к
ToUInt32(String, IFormatProvider)
Этот API несовместим с CLS.
Преобразует заданное строковое представление числа в эквивалентное 32-битовое целое число без знака, учитывая указанные сведения об особенностях форматирования, связанных с языком и региональными параметрами.
Параметры
Строка, содержащая преобразуемое число.
Объект, предоставляющий сведения о форматировании для определенного языка и региональных параметров.
Возвращаемое значение
Исключения
value не состоит из необязательного знака, за которым следует последовательность цифр (0–9).
Параметр value представляет число меньше MinValue или больше MaxValue.
Примеры
В следующем примере определяется пользовательский NumberFormatInfo объект, который распознает строку «POS» как положительный знак и строку «отрицателен» в качестве знака отрицательного числа. Затем он пытается преобразовать каждый элемент массива числовых строк в целое число, используя как этот поставщик, так и NumberFormatInfo поставщик для инвариантного языка и региональных параметров.
Комментарии
Если вы предпочитаете не выполнять обработку исключения в случае сбоя преобразования, можно вызвать UInt32.TryParse метод. Он возвращает Boolean значение, указывающее, успешно ли выполнено преобразование.
Применяется к
ToUInt32(String, Int32)
Этот API несовместим с CLS.
Преобразует строковое представление числа с указанным основанием системы счисления в эквивалентное ему 32-битовое целое число без знака.
Параметры
Строка, содержащая преобразуемое число.
Возвращаемое значение
Исключения
fromBase не равно 2, 8, 10 или 16.
value имеет значение Empty.
Параметр value представляет число меньше MinValue или больше MaxValue.
Примеры
В следующем примере выполняется попытка интерпретации каждого элемента в массиве числовых строк в виде шестнадцатеричного значения и преобразования его в целое число без знака.
Комментарии
Если fromBase значение равно 16, можно добавить префикс value «0x» или «0x» к номеру, заданному параметром.
Так как UInt32 тип данных поддерживает только значения без знака, ToUInt32(String, Int32) метод предполагает, что value выражение выражается в двоичном представлении без знака. Иными словами, все 32 бита используются для представления числового значения, а бит знака отсутствует. В результате можно написать код, в котором целочисленное значение со знаком, находящийся вне диапазона UInt32 типа данных, преобразуется в UInt32 значение без метода, создающего исключение. В следующем примере преобразуется MinValue в шестнадцатеричное строковое представление, а затем вызывается ToUInt32(String, Int32) метод. Вместо вызова исключения метод отображает сообщение «0x80000000 преобразуется в 2147483648».
При выполнении двоичных операций или числовых преобразований всегда обязанностью разработчика является проверка того, что метод или оператор использует соответствующее числовое представление для интерпретации определенного значения. В следующем примере показан один из методов, позволяющих гарантировать, что метод не использует двоичное представление для интерпретации значения, которое использует представление дополнения двух при преобразовании шестнадцатеричной строки в UInt32 значение. В примере определяется, представляет ли значение целое число со знаком или без знака, пока оно преобразует это значение в строковое представление. Когда пример преобразует значение в UInt32 значение, он проверяет, является ли исходное значение целым числом со знаком. Если да, и если задан бит высокого порядка (который указывает, что исходное значение было отрицательным), метод создает исключение.
Convert. To Int32 Метод
Определение
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Преобразует заданное значение в 32-битовое целое число со знаком.
Перегрузки
Преобразует заданное строковое представление числа в эквивалентное 32-битовое целое число со знаком.
Преобразует значение заданного 16-битового целого числа без знака в эквивалентное 32-битовое целое число со знаком.
Преобразует значение заданного 32-битового целого числа без знака в эквивалентное 32-битовое целое число со знаком.
Преобразует значение заданного числа с плавающей запятой одиночной точности в эквивалентное 32-битовое целое число со знаком.
Преобразует значение заданного объекта в эквивалентное 32-битовое целое число со знаком, используя указанные сведения об особенностях форматирования, связанных с языком и региональными параметрами.
Преобразует заданное строковое представление числа в эквивалентное 32-битовое целое число со знаком, учитывая указанные сведения об особенностях форматирования, связанных с языком и региональными параметрами.
Преобразует строковое представление числа с указанным основанием системы счисления в эквивалентное ему 32-битовое целое число со знаком.
Преобразует значение заданного 64-разрядного целого числа без знака в эквивалентное 32-разрядное целое число со знаком.
Преобразует значение заданного объекта в 32-битовое целое число со знаком.
Преобразует значение заданного 8-разрядного целого числа со знаком в эквивалентное 32-разрядное целое число со знаком.
Преобразует значение заданного 64-битового целого числа со знаком в эквивалентное 32-битовое целое число со знаком.
Возвращает заданное 32-битовое целое число со знаком; фактическое преобразование не производится.
Преобразует значение заданного 16-битового целого числа со знаком в эквивалентное 32-битовое целое число со знаком.
Преобразует значение заданного числа с плавающей запятой двойной точности в эквивалентное 32-битовое целое число со знаком.
Преобразует значение заданного десятичного числа в эквивалентное 32-битовое целое число со знаком.
При вызове этого метода всегда возникает исключение InvalidCastException.
Преобразует значение заданного символа Юникода в эквивалентное 32-битовое целое число со знаком.
Преобразует значение заданного 8-битового целого числа без знака в эквивалентное 32-битовое целое число со знаком.
Преобразует заданное логическое значение в эквивалентное 32-битовое целое число со знаком.
ToInt32(String)
Преобразует заданное строковое представление числа в эквивалентное 32-битовое целое число со знаком.
Параметры
Строка, содержащая преобразуемое число.
Возвращаемое значение
Исключения
value не состоит из необязательного знака, за которым следует последовательность цифр (0–9).
Параметр value представляет число меньше MinValue или больше MaxValue.
Примеры
В следующем примере предпринимается попытка преобразовать каждый элемент в массиве числовых строк в целое число.
Комментарии
Использование ToInt32(String) метода эквивалентно передаче value в Int32.Parse(String) метод. value Параметр интерпретируется с использованием соглашений о форматировании, принятых в культуре текущего потока.
Если вы предпочитаете не выполнять обработку исключения в случае сбоя преобразования, можно вызвать Int32.TryParse метод. Он возвращает Boolean значение, указывающее, успешно ли выполнено преобразование.
Применяется к
ToInt32(UInt16)
Этот API несовместим с CLS.
Преобразует значение заданного 16-битового целого числа без знака в эквивалентное 32-битовое целое число со знаком.
Параметры
16-разрядное целое число без знака для преобразования.
Возвращаемое значение
Примеры
В следующем примере каждый элемент массива 16-разрядных целых чисел без знака преобразуется в целое число.
Применяется к
ToInt32(UInt32)
Этот API несовместим с CLS.
Преобразует значение заданного 32-битового целого числа без знака в эквивалентное 32-битовое целое число со знаком.
Параметры
32-разрядное целое число без знака для преобразования.
Возвращаемое значение
Исключения
Значение value больше значения MaxValue.
Примеры
В следующем примере предпринимается попытка преобразовать каждый элемент массива целых чисел без знака в целое число со знаком.
Применяется к
ToInt32(Single)
Преобразует значение заданного числа с плавающей запятой одиночной точности в эквивалентное 32-битовое целое число со знаком.
Параметры
Число с плавающей запятой одиночной точности, которое нужно преобразовать.
Возвращаемое значение
Исключения
value больше MaxValue или меньше MinValue.
Примеры
В следующем примере предпринимается попытка преобразовать каждый элемент массива Single значений в целое число.
См. также раздел
Применяется к
ToInt32(Object, IFormatProvider)
Преобразует значение заданного объекта в эквивалентное 32-битовое целое число со знаком, используя указанные сведения об особенностях форматирования, связанных с языком и региональными параметрами.
Параметры
Объект, реализующий интерфейс IConvertible.
Объект, предоставляющий сведения о форматировании для определенного языка и региональных параметров.
Возвращаемое значение
Исключения
Параметр value имеет неправильный формат.
value не реализует IConvertible.
Параметр value представляет число меньше MinValue или больше MaxValue.
Примеры
Комментарии
Базовые типы игнорируются provider ; однако параметр может использоваться, если value является определяемым пользователем типом, реализующим IConvertible интерфейс.
Применяется к
ToInt32(String, IFormatProvider)
Преобразует заданное строковое представление числа в эквивалентное 32-битовое целое число со знаком, учитывая указанные сведения об особенностях форматирования, связанных с языком и региональными параметрами.
Параметры
Строка, содержащая преобразуемое число.
Объект, предоставляющий сведения о форматировании для определенного языка и региональных параметров.
Возвращаемое значение
Исключения
value не состоит из необязательного знака, за которым следует последовательность цифр (0–9).
Параметр value представляет число меньше MinValue или больше MaxValue.
Примеры
В следующем примере определяется пользовательский NumberFormatInfo объект, который распознает строку «POS» как положительный знак и строку «отрицателен» в качестве знака отрицательного числа. Затем он пытается преобразовать каждый элемент массива числовых строк в целое число, используя как этот поставщик, так и NumberFormatInfo поставщик для инвариантного языка и региональных параметров.
Комментарии
Если вы предпочитаете не выполнять обработку исключения в случае сбоя преобразования, можно вызвать Int32.TryParse метод. Он возвращает Boolean значение, указывающее, успешно ли выполнено преобразование.
Применяется к
ToInt32(String, Int32)
Преобразует строковое представление числа с указанным основанием системы счисления в эквивалентное ему 32-битовое целое число со знаком.
Параметры
Строка, содержащая преобразуемое число.
Возвращаемое значение
Исключения
fromBase не равно 2, 8, 10 или 16.
value имеет значение Empty.
Параметр value представляет число меньше MinValue или больше MaxValue.
Комментарии
Если fromBase значение равно 16, можно добавить префикс value «0x» или «0x» к номеру, заданному параметром.
Так как отрицательный знак не поддерживается для небазовых 10 числовых представлений, ToInt32(String, Int32) метод предполагает, что отрицательные числа используют представление дополнения двух. Иными словами, метод всегда интерпретирует двоичный бит наивысшего порядка целого числа (бит 31) как бит знака. В результате можно написать код, в котором не присвоено 10-десятичное число, которое находится вне диапазона Int32 типа данных, преобразуется в Int32 значение без метода, создающего исключение. Следующий пример увеличивает на Int32.MaxValue единицу, преобразует полученное число в шестнадцатеричное строковое представление, а затем вызывает ToInt32(String, Int32) метод. Вместо вызова исключения метод отображает сообщение «0x80000000 преобразуется в-2147483648».
При выполнении двоичных операций или числовых преобразований всегда обязанностью разработчика является проверка того, что метод использует соответствующее числовое представление для интерпретации определенного значения. Как показано в следующем примере, можно убедиться, что метод обрабатывает перегрузки соответствующим образом, сначала извлекая знак числового значения перед его преобразованием в шестнадцатеричное строковое представление. Создавать исключение, если исходное значение было положительным, а преобразование обратно в целое число дает отрицательное значение.
Каждое значение имеет соответствующий тип, который определяет атрибуты, такие как объем памяти, выделяемой значению, диапазон возможных значений и доступные элементы. Многие значения можно выразить несколькими типами. Например, число 4 можно выразить как целое число или как число с плавающей запятой. Преобразование типа создает значение нового типа, эквивалентное значению старого типа, но при этом не обязательно сохраняется идентичность (или точные значения) первоначального объекта.
Преобразование из производного класса в базовый класс. Это означает, например, что экземпляр любого класса или структуры может быть преобразован в экземпляр Object. Для этого преобразования не требуется оператор приведения или преобразования.
Преобразование из типа, реализующего интерфейс, в объект интерфейса, представляющий этот интерфейс. Для этого преобразования не требуется оператор приведения или преобразования.
Класс Convert, предоставляющий набор методов, реализующих методы интерфейса IConvertible. Дополнительные сведения см. в разделе Класс Convert.
Класс TypeConverter, являющийся базовым классом, который может быть расширен для поддержки преобразования указанного типа в любой другой тип. Дополнительные сведения см. в разделе Класс TypeConverter.
Неявное преобразование с помощью оператора implicit
Расширяющие преобразования предполагают создание нового значения из значения существующего типа, имеющего более ограничивающий диапазон или более ограниченный список членов, чем целевой тип. Расширяющие преобразования не могут привести к потере данных (хотя способны дать в результате меньшую точность). Поскольку потеря данных исключена, компиляторы могут обрабатывать преобразование неявно или прозрачно без необходимости использования метода явного преобразования или оператора приведения.
Хотя код, используемый для неявного преобразования, может вызывать метод преобразования или использовать оператор приведения, применение таких методов компиляторами, поддерживающими неявные преобразования, не требуется.
Например, тип Decimal поддерживает неявные преобразования значений из типов Byte, Char, Int16, Int32, Int64, SByte, UInt16, UInt32 и UInt64. В следующем примере демонстрируются некоторые неявные преобразования при присвоении значений переменной Decimal.
В клиентском коде затем можно объявить переменную ByteWithSign и присвоить ей значения Byte и SByte, не выполняя явные преобразования и не используя операторы приведения, как показано в следующем примере.
Явное преобразование с помощью оператора explicit
Сужающие преобразования предполагают создание нового значения из значения существующего типа, имеющего более широкий диапазон или список членов, чем у целевого типа. Поскольку сужающее преобразование может привести к потере данных, компиляторы, как правило, требуют выполнять преобразование явно посредством вызова метода преобразования или оператора приведения. Это означает, что преобразование должно обрабатываться явно в коде разработчика.
Основная цель требования явного использования метода преобразования или оператора приведения заключается в информировании разработчика о возможной потере данных или исключении OverflowException, чтобы это можно было учесть в коде. При этом некоторые компиляторы могут опускать это требование. Например, в Visual Basic, если параметр Option Strict выключен (по умолчанию), компилятор Visual Basic предпринимает попытку выполнения сужающего преобразования неявно.
Например, типы данных UInt32, Int64 и UInt64 имеют диапазоны, покрывающие диапазон типа данных Int32, как показано в таблице ниже.
| Type | Сравнение с диапазоном Int32 |
|---|---|
| Int64 | Int64.MaxValue больше, чем Int32.MaxValue, а Int64.MinValue меньше (имеет больший отрицательный диапазон), чем Int32.MinValue. |
| UInt32 | Значение UInt32.MaxValue больше значения Int32.MaxValue. |
| UInt64 | Значение UInt64.MaxValue больше значения Int32.MaxValue. |
Большинство компиляторов допускают явное преобразование как с проверкой, так и без проверки. Если при выполнении преобразования с проверкой преобразуемое значение находится вне диапазона допустимых значений конечного типа, создается исключение OverflowException. Если в такой же ситуации выполнять преобразование без проверки, то исключение может не быть создано, но результат преобразования в данном случае неизвестен, и на выходе может быть получено неверное значение.
В следующем примере на C# используются ключевые слова checked и unchecked для демонстрации разницы поведения при преобразовании выходящего за пределы диапазона значения Byte в Byte. При выполнении преобразования с проверкой создается исключение, а при выполнении преобразования без проверки значение Byte.MaxValue присваивается переменой Byte.
Если присваивание включает оператор приведения или метод преобразования, как показано в следующем примере, в клиентском коде можно объявить переменную ByteWithSign и присвоить ей значения Int32 и UInt32.
Интерфейс IConvertible
Метод, возвращающий объект TypeCode реализующего типа.
Метод для преобразования реализующего типа в каждый из базовых типов среды CLR (Boolean, Byte, DateTime, Decimal, Double и т. д.).
Универсальный метод преобразования экземпляра реализующего типа в другой заданный тип. Неподдерживаемые преобразования должны порождать исключение InvalidCastException.
Все базовые типы среды CLR (т. е. Boolean, Byte, Char, DateTime, Decimal, Double, Int16, Int32, Int64, SByte, Single, String, UInt16, UInt32 и UInt64), а также типы DBNull и Enum реализуют интерфейс IConvertible. Тем не менее это явные реализации интерфейса; метод преобразования можно вызвать только посредством переменной интерфейса IConvertible, как показано в следующем примере. В этом примере показано преобразование значения Int32 в эквивалентное значение Char.
Требование вызова метода преобразования для интерфейса, а не для реализующего типа, делает явные реализации интерфейса относительно требовательными к ресурсам. Вместо этого для выполнения преобразования между базовыми типами среды CLR рекомендуется вызывать соответствующий член класса Convert. Дополнительные сведения см. в следующем разделе, Класс Convert.
Класс Convert
Хотя каждая реализация интерфейса IConvertible базового типа может быть вызвана для выполнения преобразования типа, вызов методов класса System.Convert является рекомендуемым и не зависящим от языка способом преобразования одного базового типа в другой. Кроме этого, метод Convert.ChangeType(Object, Type, IFormatProvider) может использоваться для преобразования указанного настраиваемого типа в другой тип.
Преобразования между базовыми типами
Класс Convert обеспечивает не зависящий от языка способ выполнения преобразований между базовыми типами и доступен во всех языках, предназначенных для среды CLR. Он предоставляет набор методов для расширяющих и сужающих преобразований и создает исключение InvalidCastException для преобразований, которые не поддерживаются (например, для преобразования значения DateTime в целочисленное значение). Сужающие преобразования выполняются в проверяемом контексте, а если преобразование завершается неудачей, порождается исключение OverflowException.
Поскольку класс Convert включает методы преобразования для каждого базового типа, он исключает необходимость вызова явной реализации интерфейса IConvertible каждого из базовых классов.
В некоторых случаях, особенно при преобразовании значений с плавающей запятой, преобразование может предполагать потерю точности, даже если исключение OverflowException не создается. В следующем примере показана потеря точности. В этом случае значение Decimal после преобразования в Double имеет меньшую точность (меньше значимых цифр). Во втором случае при преобразовании значения Double оно округляется с 42,72 до 43, чтобы было выполнено преобразование.
Настраиваемые преобразования, использующие метод ChangeType
В следующем примере показано несколько вызовов реализаций интерфейса IConvertible для преобразования объектов TemperatureCelsius в объекты TemperatureFahrenheit и наоборот.
Класс TypeConverter
.NET также позволяет определить преобразователь типов для пользовательского типа путем расширения класса System.ComponentModel.TypeConverter и сопоставления преобразователя с типом через атрибут System.ComponentModel.TypeConverterAttribute. В следующей таблице выделены различия между этим подходом и реализацией интерфейса IConvertible для настраиваемого типа.
Поддержка во время разработки может быть предоставлена для настраиваемого типа лишь при условии, что для него определен преобразователь типа.