- Ошибка при использовании Convert.ToInt32
- Почему Convert.ToInt32 может быть опасным
- О песочнице
- О модерации
- Convert. To UInt32 Метод
- Определение
- Перегрузки
- ToUInt32(Single)
- Параметры
- Возвращаемое значение
- Исключения
- Примеры
- См. также раздел
- Применяется к
- ToUInt32(String, IFormatProvider)
- Параметры
- Возвращаемое значение
- Исключения
- Примеры
- Комментарии
- Применяется к
- ToUInt32(String, Int32)
- Параметры
- Возвращаемое значение
- Исключения
- Примеры
- Комментарии
- Convert. To Int32 Метод
- Определение
- Перегрузки
- ToInt32(String)
- Параметры
- Возвращаемое значение
- Исключения
- Примеры
- Комментарии
- Применяется к
- ToInt32(UInt16)
- Параметры
- Возвращаемое значение
- Примеры
- Применяется к
- ToInt32(UInt32)
- Параметры
- Возвращаемое значение
- Исключения
- Примеры
- Применяется к
- ToInt32(Single)
- Параметры
- Возвращаемое значение
- Исключения
- Примеры
- См. также раздел
- Применяется к
- ToInt32(Object, IFormatProvider)
- Параметры
- Возвращаемое значение
- Исключения
- Примеры
- Комментарии
- Применяется к
- ToInt32(String, IFormatProvider)
- Параметры
- Возвращаемое значение
- Исключения
- Примеры
- Комментарии
- Применяется к
- ToInt32(String, Int32)
- Параметры
- Возвращаемое значение
- Исключения
- Комментарии
Ошибка при использовании Convert.ToInt32
Здравствуйте.решила начать изучать c# / у меня при Conver.Toint32 выдается большая ошибка. Искала в блоге на эту тему работала разными заданиями все равно выдает какую то ошибку . Что может быть причиной этому если я правильно пишу код?
Вот что выдает .
1>—— Сборка начата: проект: ConsoleApp3, Конфигурация: Debug Any CPU ——
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.Curr entVersion.targets(4051,5): warning MSB3026: не удалось скопировать «obj\Debug\ConsoleApp3.exe» в «bin\Debug\ConsoleApp3.exe». Повторная попытка начнется 1 через 1000 мс. Процесс не может получить доступ к файлу «bin\Debug\ConsoleApp3.exe», так как этот файл используется другим процессом.
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.Curr entVersion.targets(4051,5): warning MSB3026: не удалось скопировать «obj\Debug\ConsoleApp3.exe» в «bin\Debug\ConsoleApp3.exe». Повторная попытка начнется 2 через 1000 мс. Процесс не может получить доступ к файлу «bin\Debug\ConsoleApp3.exe», так как этот файл используется другим процессом.
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.Curr entVersion.targets(4051,5): warning MSB3026: не удалось скопировать «obj\Debug\ConsoleApp3.exe» в «bin\Debug\ConsoleApp3.exe». Повторная попытка начнется 3 через 1000 мс. Процесс не может получить доступ к файлу «bin\Debug\ConsoleApp3.exe», так как этот файл используется другим процессом.
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.Curr entVersion.targets(4051,5): warning MSB3026: не удалось скопировать «obj\Debug\ConsoleApp3.exe» в «bin\Debug\ConsoleApp3.exe». Повторная попытка начнется 4 через 1000 мс. Процесс не может получить доступ к файлу «bin\Debug\ConsoleApp3.exe», так как этот файл используется другим процессом.
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.Curr entVersion.targets(4051,5): warning MSB3026: не удалось скопировать «obj\Debug\ConsoleApp3.exe» в «bin\Debug\ConsoleApp3.exe». Повторная попытка начнется 5 через 1000 мс. Процесс не может получить доступ к файлу «bin\Debug\ConsoleApp3.exe», так как этот файл используется другим процессом.
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.Curr entVersion.targets(4051,5): warning MSB3026: не удалось скопировать «obj\Debug\ConsoleApp3.exe» в «bin\Debug\ConsoleApp3.exe». Повторная попытка начнется 6 через 1000 мс. Процесс не может получить доступ к файлу «bin\Debug\ConsoleApp3.exe», так как этот файл используется другим процессом.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Источник
Почему Convert.ToInt32 может быть опасным
If value is halfway between two whole numbers, the even number is returned; that is, 4.5 is converted to 4, and 5.5 is converted to 6.
Т.е. неискушенные умы могут подумать, что это ошибка. Вот код соответствующий «волшебному» методу:
Можно заметить, что во внутреннем условии есть проверка на четность, которая и вносит «магические» коррективы. Для чего это необходимо, для меня осталось загадкой.
Покопавшись в интернете есть статьи, в которых столкнулись с похожей проблемой, где, как вариант, предлагают использовать операции приведения. Мы же решили сделать свою реализацию, убрав условия проверки:
В комментариях можно оставить предположения, для чего добавлена «магия» в этот, с виду предсказуемый, метод.
О песочнице
Это «Песочница» — раздел, в который попадают дебютные посты пользователей, желающих стать полноправными участниками сообщества.
Если у вас есть приглашение, отправьте его автору понравившейся публикации — тогда её смогут прочитать и обсудить все остальные пользователи Хабра.
Чтобы исключить предвзятость при оценке, все публикации анонимны, псевдонимы показываются случайным образом.
О модерации
Не надо пропускать:
- рекламные и PR-публикации
- вопросы и просьбы (для них есть Хабр Q&A);
- вакансии (используйте Хабр Карьеру)
- статьи, ранее опубликованные на других сайтах;
- статьи без правильно расставленных знаков препинания, со смайликами, с обилием восклицательных знаков, неоправданным выделением слов и предложений и другим неуместным форматированием текста;
- жалобы на компании и предоставляемые услуги;
- низкокачественные переводы;
- куски программного кода без пояснений;
- односложные статьи;
- статьи, слабо относящиеся к или не относящиеся к ней вовсе.
Источник
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 , округленное до ближайшего 32-разрядного целого числа без знака. Если value имеет среднее значение между двумя целыми числами, будет возвращено четное число; так, значение 4,5 преобразуется в 4, а 5,5 — в 6.
Исключения
value меньше нуля или больше MaxValue.
Примеры
В следующем примере предпринимается попытка преобразовать каждый элемент массива Single значений в целое число без знака.
См. также раздел
Применяется к
ToUInt32(String, IFormatProvider)
Этот API несовместим с CLS.
Преобразует заданное строковое представление числа в эквивалентное 32-битовое целое число без знака, учитывая указанные сведения об особенностях форматирования, связанных с языком и региональными параметрами.
Параметры
Строка, содержащая преобразуемое число.
Объект, предоставляющий сведения о форматировании для определенного языка и региональных параметров.
Возвращаемое значение
32-разрядное целое число без знака, которое эквивалентно значению параметра value , или 0 (нуль), если value имеет значение null .
Исключения
value не состоит из необязательного знака, за которым следует последовательность цифр (0–9).
Параметр value представляет число меньше MinValue или больше MaxValue.
Примеры
В следующем примере определяется пользовательский NumberFormatInfo объект, который распознает строку «POS» как положительный знак и строку «отрицателен» в качестве знака отрицательного числа. Затем он пытается преобразовать каждый элемент массива числовых строк в целое число, используя как этот поставщик, так и NumberFormatInfo поставщик для инвариантного языка и региональных параметров.
Комментарии
Возвращаемое значение является результатом вызова метода UInt32.Parse value .
provider — Это IFormatProvider экземпляр, который получает NumberFormatInfo объект. NumberFormatInfoОбъект предоставляет сведения о формате для конкретного языка и региональных параметров value . Если provider имеет значение null , NumberFormatInfo используется для текущего языка и региональных параметров.
Если вы предпочитаете не выполнять обработку исключения в случае сбоя преобразования, можно вызвать UInt32.TryParse метод. Он возвращает Boolean значение, указывающее, успешно ли выполнено преобразование.
Применяется к
ToUInt32(String, Int32)
Этот API несовместим с CLS.
Преобразует строковое представление числа с указанным основанием системы счисления в эквивалентное ему 32-битовое целое число без знака.
Параметры
Строка, содержащая преобразуемое число.
Основание системы счисления, используемой для представления числа, заданного в параметре value , равное 2, 8, 10 или 16.
Возвращаемое значение
32-разрядное целое число без знака, которое эквивалентно значению параметра value , или 0 (нуль), если value имеет значение null .
Исключения
fromBase не равно 2, 8, 10 или 16.
Значение value , представляющее недесятичное число без знака, использовано со знаком минус.
value имеет значение Empty.
value содержит символ, который не является допустимой цифрой в основании, заданном параметром fromBase . Сообщение об исключении указывает, что отсутствуют цифры для преобразования, если первый символ в value недопустим; в противном случае сообщение указывает, что value содержит недопустимые конечные символы.
Значение value , представляющее недесятичное число без знака, использовано со знаком минус.
Параметр 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-битовое целое число со знаком.
Параметры
Строка, содержащая преобразуемое число.
Возвращаемое значение
32-разрядное знаковое целое число, которое эквивалентно значению параметра value , или 0 (нуль), если value имеет значение null .
Исключения
value не состоит из необязательного знака, за которым следует последовательность цифр (0–9).
Параметр value представляет число меньше MinValue или больше MaxValue.
Примеры
В следующем примере предпринимается попытка преобразовать каждый элемент в массиве числовых строк в целое число.
Комментарии
Использование ToInt32(String) метода эквивалентно передаче value в Int32.Parse(String) метод. value Параметр интерпретируется с использованием соглашений о форматировании, принятых в культуре текущего потока.
Если вы предпочитаете не выполнять обработку исключения в случае сбоя преобразования, можно вызвать Int32.TryParse метод. Он возвращает Boolean значение, указывающее, успешно ли выполнено преобразование.
Применяется к
ToInt32(UInt16)
Этот API несовместим с CLS.
Преобразует значение заданного 16-битового целого числа без знака в эквивалентное 32-битовое целое число со знаком.
Параметры
16-разрядное целое число без знака для преобразования.
Возвращаемое значение
32-разрядное знаковое целое число, которое эквивалентно значению value .
Примеры
В следующем примере каждый элемент массива 16-разрядных целых чисел без знака преобразуется в целое число.
Применяется к
ToInt32(UInt32)
Этот API несовместим с CLS.
Преобразует значение заданного 32-битового целого числа без знака в эквивалентное 32-битовое целое число со знаком.
Параметры
32-разрядное целое число без знака для преобразования.
Возвращаемое значение
32-разрядное знаковое целое число, которое эквивалентно значению value .
Исключения
Значение value больше значения MaxValue.
Примеры
В следующем примере предпринимается попытка преобразовать каждый элемент массива целых чисел без знака в целое число со знаком.
Применяется к
ToInt32(Single)
Преобразует значение заданного числа с плавающей запятой одиночной точности в эквивалентное 32-битовое целое число со знаком.
Параметры
Число с плавающей запятой одиночной точности, которое нужно преобразовать.
Возвращаемое значение
Значение value , округленное до ближайшего 32-разрядного целого числа со знаком. Если value имеет среднее значение между двумя целыми числами, будет возвращено четное число; так, значение 4,5 преобразуется в 4, а 5,5 — в 6.
Исключения
value больше MaxValue или меньше MinValue.
Примеры
В следующем примере предпринимается попытка преобразовать каждый элемент массива Single значений в целое число.
См. также раздел
Применяется к
ToInt32(Object, IFormatProvider)
Преобразует значение заданного объекта в эквивалентное 32-битовое целое число со знаком, используя указанные сведения об особенностях форматирования, связанных с языком и региональными параметрами.
Параметры
Объект, реализующий интерфейс IConvertible.
Объект, предоставляющий сведения о форматировании для определенного языка и региональных параметров.
Возвращаемое значение
32-разрядное знаковое целое число, эквивалентное значению value , или нуль, если value имеет значение null .
Исключения
Параметр value имеет неправильный формат.
value не реализует IConvertible.
Параметр value представляет число меньше MinValue или больше MaxValue.
Примеры
В следующем примере определяется класс, реализующий интерфейс, IConvertible и класс, реализующий интерфейс IFormatProvider . Объекты класса, реализующего, IConvertible содержат массив Double значений. Объект каждого класса передается в ToInt32 метод. Этот метод возвращает среднее значение массива Double значений с помощью объекта, реализующего IFormatProvider метод, чтобы определить, как вычисляется среднее значение.
Комментарии
Возвращаемое значение является результатом вызова IConvertible.ToInt32 метода базового типа value .
provider позволяет пользователю указать сведения о преобразовании для содержимого в зависимости от языка и региональных параметров value . Например, если value параметр имеет значение, String представляющее число, provider может предоставить сведения об нотации, используемой для представления этого числа, в зависимости от языка и региональных параметров.
Базовые типы игнорируются provider ; однако параметр может использоваться, если value является определяемым пользователем типом, реализующим IConvertible интерфейс.
Применяется к
ToInt32(String, IFormatProvider)
Преобразует заданное строковое представление числа в эквивалентное 32-битовое целое число со знаком, учитывая указанные сведения об особенностях форматирования, связанных с языком и региональными параметрами.
Параметры
Строка, содержащая преобразуемое число.
Объект, предоставляющий сведения о форматировании для определенного языка и региональных параметров.
Возвращаемое значение
32-разрядное знаковое целое число, которое эквивалентно значению параметра value , или 0 (нуль), если value имеет значение null .
Исключения
value не состоит из необязательного знака, за которым следует последовательность цифр (0–9).
Параметр value представляет число меньше MinValue или больше MaxValue.
Примеры
В следующем примере определяется пользовательский NumberFormatInfo объект, который распознает строку «POS» как положительный знак и строку «отрицателен» в качестве знака отрицательного числа. Затем он пытается преобразовать каждый элемент массива числовых строк в целое число, используя как этот поставщик, так и NumberFormatInfo поставщик для инвариантного языка и региональных параметров.
Комментарии
Возвращаемое значение является результатом вызова Int32.Parse метода для value .
provider — Это IFormatProvider экземпляр, который получает NumberFormatInfo объект. NumberFormatInfoОбъект предоставляет сведения о формате для конкретного языка и региональных параметров value . Если provider имеет значение null , NumberFormatInfo используется для текущего языка и региональных параметров.
Если вы предпочитаете не выполнять обработку исключения в случае сбоя преобразования, можно вызвать Int32.TryParse метод. Он возвращает Boolean значение, указывающее, успешно ли выполнено преобразование.
Применяется к
ToInt32(String, Int32)
Преобразует строковое представление числа с указанным основанием системы счисления в эквивалентное ему 32-битовое целое число со знаком.
Параметры
Строка, содержащая преобразуемое число.
Основание системы счисления, используемой для представления числа, заданного в параметре value , равное 2, 8, 10 или 16.
Возвращаемое значение
32-разрядное знаковое целое число, которое эквивалентно значению параметра value , или 0 (нуль), если value имеет значение null .
Исключения
fromBase не равно 2, 8, 10 или 16.
value , представляющему число со знаком, не основанное на десятеричной системе счисления, предшествует знак минус.
value имеет значение Empty.
value содержит символ, который не является допустимой цифрой в основании, заданном параметром fromBase . Сообщение об исключении указывает, что отсутствуют цифры для преобразования, если первый символ в value недопустим; в противном случае сообщение указывает, что value содержит недопустимые конечные символы.
value , представляющему число со знаком, не основанное на десятеричной системе счисления, предшествует знак минус.
Параметр value представляет число меньше MinValue или больше MaxValue.
Комментарии
Если fromBase значение равно 16, можно добавить префикс value «0x» или «0x» к номеру, заданному параметром.
Так как отрицательный знак не поддерживается для небазовых 10 числовых представлений, ToInt32(String, Int32) метод предполагает, что отрицательные числа используют представление дополнения двух. Иными словами, метод всегда интерпретирует двоичный бит наивысшего порядка целого числа (бит 31) как бит знака. В результате можно написать код, в котором не присвоено 10-десятичное число, которое находится вне диапазона Int32 типа данных, преобразуется в Int32 значение без метода, создающего исключение. Следующий пример увеличивает на Int32.MaxValue единицу, преобразует полученное число в шестнадцатеричное строковое представление, а затем вызывает ToInt32(String, Int32) метод. Вместо вызова исключения метод отображает сообщение «0x80000000 преобразуется в-2147483648».
При выполнении двоичных операций или числовых преобразований всегда обязанностью разработчика является проверка того, что метод использует соответствующее числовое представление для интерпретации определенного значения. Как показано в следующем примере, можно убедиться, что метод обрабатывает перегрузки соответствующим образом, сначала извлекая знак числового значения перед его преобразованием в шестнадцатеричное строковое представление. Создавать исключение, если исходное значение было положительным, а преобразование обратно в целое число дает отрицательное значение.
Источник