Tryparse c что это
БлогNot. Visual C++: 3 способа получить число из поля ввода
Visual C++: 3 способа получить число из поля ввода
Представим, что в проект Visual C++ добавлена форма Form1 и однострочное (свойство Multiline==false ) текстовое поле textBox1 . Нужно проверить, введено ли в поле вещественное число, возможно, содержащее дробную часть. Экспоненциальную («с буквой e») форму записи вещественных чисел для простоты не рассматриваем.
Возможно, по меньшей мере, 3 способа решения задачи:
Способ 1. Методы класса System::Convert::To<тип>
Для вещественного числа нужен метод ToSingle или ToDouble вместо ToInt32 .
Способ 2. Метод TryParse
Выгодно тем, что информация о формате вещественного числа (например, что отделяет целую часть от дробной — точка или запятая), берётся из системы. Впрочем, так же поступает и код третьего способа.
Способ 3. Проверка на допустимые символы и их последовательность
Здесь мы подходим к задаче «радикально», контролируя действия пользователя во время ввода с помощью обработчика события KeyPress , позволяя вводить с клавиатуры только вещественные или целые числа, возможно, со знаком «минус» в первой позиции числа.
На практике нужно обратить внимание, что для ввода чисел есть специально предназначенная для этой цели стандартная компонента NumericUpDown .
Разбираем В. метод tryparse
есть ли какая-то форма проверки ошибок, как блок Try-Catch?
8 ответов
Parse выдает исключение, если оно не может проанализировать значение, тогда как TryParse возвращает bool указывает, удалось ли это.
TryParse не только try / catch внутренне-весь смысл в том, что он реализован без исключений, чтобы он был быстрым. На самом деле способ, которым он, скорее всего, реализован, заключается в том, что внутренне Parse метод будем называть TryParse а затем выбросить исключение, если он возвращает false .
в двух словах, использовать Parse Если вы уверены, что значение будет действительным; в противном случае используйте TryParse .
Если строка не может быть преобразована в целое число, то
- int.Parse () выдаст исключение
- int.TryParse () вернет false (но не выдаст исключение)
метод TryParse позволяет проверить, является ли что-то разбираемым. Если вы попытаетесь проанализировать, как в первом случае с недопустимым int, вы получите исключение в то время как в TryParse он возвращает логическое значение, сообщающее вам, удалось ли выполнить синтаксический анализ или нет.
в качестве сноски передача null большинству методов TryParse вызовет исключение.
Parse создает исключение, если преобразование из строки в указанный тип данных завершается неудачно, тогда как TryParse явно избегает создания исключения.
TryParse не возвращает значение, он возвращает код состояния, чтобы указать, удалось ли выполнить синтаксический анализ (и не создает исключение).
для записи я тестирую два кода: которые просто пытаются преобразовать из строки в число, и если это не удастся, то назначьте число нулю.
для c# лучший вариант-использовать tryparse, потому что try & Catch alternative бросил исключение
что это болезненно медленно и нежелательно, однако код не останавливается, если исключение Debug не установлено для остановки с ним.
Я знаю, что это очень старый пост, но думал поделиться несколькими подробностями о разборе против TryParse.
у меня был сценарий, где DateTime необходимо преобразовать в String и если datevalue null или string.пустые мы столкнулись с исключением. Чтобы преодолеть это, мы заменили Parse на TryParse и получим дату по умолчанию.
должны объявить другую переменную и использоваться как Out для TryParse.
двойной.Parse ( » — » ); вызывает исключение, в то время как двойной.TryParse (» — » , out parsed); анализирует до 0 поэтому я думаю, что TryParse делает более сложные преобразования.
Int32.Try Parse Метод
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Преобразует строковое представление числа в эквивалентное ему 32-битовое целое число со знаком. Возвращает значение, указывающее, успешно ли выполнена операция.
Перегрузки
Преобразует строковое представление числа в формате, соответствующем языку и региональным параметрам, в эквивалентное ему 32-битовое целое число со знаком. Возвращает значение, указывающее, успешно ли выполнено преобразование.
Пытается проанализировать диапазон символов в значение.
Преобразует строковое представление числа в эквивалентное ему 32-битовое целое число со знаком. Возвращает значение, указывающее, успешно ли выполнено преобразование.
Преобразует представление числа в виде диапазона в формате, соответствующем стилю, языку и региональным параметрам, в эквивалентное ему 32-битовое целое число со знаком. Возвращает значение, указывающее, успешно ли выполнено преобразование.
Преобразует представление числа в виде диапазона в формате, соответствующем стилю, языку и региональным параметрам, в эквивалентное ему 32-битовое целое число со знаком. Возвращает значение, указывающее, успешно ли выполнено преобразование.
TryParse(String, NumberStyles, IFormatProvider, Int32)
Преобразует строковое представление числа в формате, соответствующем языку и региональным параметрам, в эквивалентное ему 32-битовое целое число со знаком. Возвращает значение, указывающее, успешно ли выполнено преобразование.
Параметры
Строка, содержащая преобразуемое число. Строка интерпретируется с использованием стиля, указанного в style .
Побитовое сочетание значений перечисления, обозначающих элементы стиля, которые могут быть представлены в параметре s . Обычно указывается значение Integer.
Объект, который предоставляет сведения о форматировании параметра s в зависимости от языка и региональных параметров.
При возвращении этим методом содержит 32-разрядное целочисленное значение со знаком, эквивалентное числу, содержащемуся в параметре s , если преобразование выполнено успешно, или нуль, если оно завершилось сбоем. Преобразование завершается сбоем, если параметр s равен null или Empty, не находится в формате, совместимом с style или представляет собой число меньше MinValue или больше MaxValue. Этот параметр передается неинициализированным; любое значение, первоначально предоставленное в result , будет перезаписано.
Возвращаемое значение
Значение true , если параметр s успешно преобразован; в противном случае — значение false .
Исключения
style не является значением NumberStyles.
style не является сочетанием значений AllowHexSpecifier и HexNumber.
Примеры
В следующем примере метод вызывается Int32.TryParse(String, NumberStyles, IFormatProvider, Int32) с несколькими разными строками и NumberStyles значениями.
Комментарии
Метод TryParse похож на Parse метод, за исключением TryParse того, что метод не создает исключение, если преобразование завершается ошибкой. Это устраняет необходимость использования обработки исключений для проверки на наличие недопустимого FormatException события s и не может быть успешно проанализирована.
Параметр style определяет элементы стиля (например, пробелы или положительные или отрицательные знаки), которые разрешены в s параметре для успешной операции синтаксического анализа. Это должно быть сочетание битовых флагов из NumberStyles перечисления. В зависимости от значения style«s параметр может включать следующие элементы:
[ws] [$] [знак] [digits,]digits[.fractional_digits][e[sign]digits][ws]
Или, если style параметр включает AllowHexSpecifier:
Элементы в квадратных скобках ([ и ]) являются необязательными. Каждый из элементов описан в таблице ниже.
| Элемент | Описание |
|---|---|
| ws | Необязательный пробел. Пробел может отображаться в начале s , если style включает NumberStyles.AllowLeadingWhite флаг, или в конце s , если style этот флаг включен NumberStyles.AllowTrailingWhite . |
| $ | Символ валюты для конкретного языка и региональных параметров. Его позиция в строке определяется свойством CurrencyPositivePattern NumberFormatInfo объекта, возвращаемого provider методом GetFormat параметра. Символ валюты может отображаться, s если style включает NumberStyles.AllowCurrencySymbol флаг. |
| sign | Необязательный знак. Символ знака может появиться, s если style он содержит NumberStyles.AllowLeadingSign или NumberStyles.AllowTrailingSign флаги. |
| digits | Последовательность цифр от 0 до 9. |
| , | Разделитель тысяч, зависящих от языка и региональных параметров. Разделитель тысяч языков и региональных параметров, указанных параметром provider , может отображаться, s если style он содержит NumberStyles.AllowThousands флаг. |
| . | Символ десятичной запятой, зависящий от языка и региональных параметров. Символ десятичной запятой, заданный языком и региональными параметрами provider , может отображаться в s том случае, если style этот флаг включен NumberStyles.AllowDecimalPoint . |
| fractional_digits | Одно или несколько вхождений цифры 0. Дробные цифры могут отображаться только в s том случае, если style включает NumberStyles.AllowDecimalPoint флаг. |
| e | Символ e или E, указывающий, что значение представлено в экспоненциальной нотации. Параметр s может представлять число в экспоненциальной нотации, если style включает NumberStyles.AllowExponent флаг. |
| hexdigits | Последовательность шестнадцатеричных цифр от 0 до f или от 0 до F. |
Все завершающие символы s NUL (U+0000) игнорируются операцией синтаксического анализа независимо от значения аргумента style .
Строка только с десятичными цифрами (которая соответствует флагу NumberStyles.None ) всегда анализируется успешно. Большинство остальных NumberStyles элементов управления элементами, которые могут быть, но не обязательно должны присутствовать в этой входной строке. В следующей таблице показано, как отдельные NumberStyles члены влияют на элементы, которые могут присутствовать в s .
| Несоозитные значения NumberStyles | Элементы, разрешенные в s, в дополнение к цифрам |
|---|---|
| NumberStyles.None | Только десятичные цифры. |
| NumberStyles.AllowDecimalPoint | Элементы десятичной запятой (.) и fractional_digits. Однако fractional_digits должны состоять только из одной или нескольких цифр или возвращаемого false метода. |
| NumberStyles.AllowExponent | Параметр s также может использовать экспоненциальную нотацию. Если s число представляет число в экспоненциальной нотации, оно должно представлять целое число в диапазоне Int32 типа данных без ненулевого дробного компонента. |
| NumberStyles.AllowLeadingWhite | Элемент ws в начале s . |
| NumberStyles.AllowTrailingWhite | Элемент ws в конце s . |
| NumberStyles.AllowLeadingSign | Знак может появиться перед цифрами. |
| NumberStyles.AllowTrailingSign | Знак может отображаться после цифр. |
| NumberStyles.AllowParentheses | Элемент знака в виде круглых скобок, заключающих числовое значение. |
| NumberStyles.AllowThousands | Элемент разделителя тысяч (,). |
| NumberStyles.AllowCurrencySymbol | Элемент $ . |
| NumberStyles.Currency | Все элементы. Параметр s не может представлять шестнадцатеричное число или число в экспоненциальной нотации. |
| NumberStyles.Float | Элемент ws в начале или конце s , знак в начале s и символ десятичной запятой (.). Параметр s также может использовать экспоненциальную нотацию. |
| NumberStyles.Number | Элементы ws, знаки, разделители тысяч (,) и десятичные знаки (.). |
| NumberStyles.Any | Все стили, кроме s не может представлять шестнадцатеричное число. |
NumberStyles.AllowHexSpecifier Если флаг используется, s должно быть шестнадцатеричным значением без префикса. Например, синтаксический анализ C9AF3 выполняется успешно, но "0xC9AF3" не выполняется. Единственными другими флагами, которые могут присутствовать, style являются NumberStyles.AllowLeadingWhite и NumberStyles.AllowTrailingWhite. (Перечисление NumberStyles имеет составной стиль, NumberStyles.HexNumberкоторый включает оба флага пробела.)
Параметр provider — это IFormatProvider реализация, например CultureInfo объект или NumberFormatInfo объект, метод которого GetFormat возвращает NumberFormatInfo объект. Объект NumberFormatInfo предоставляет сведения, относящиеся к языку и региональным параметрам, о формате s . Если provider это так null , NumberFormatInfo используется объект для текущего языка и региональных параметров.