В чем разница между Parse() и TryParse()?
int number = int.Parse(textBoxNumber.Text);
// The Try-Parse Method
int.TryParse(textBoxNumber.Text, out number);
Есть ли какая-то форма проверки ошибок, такая как блок Try-Catch?
В чем разница между Parse() и TryParse()?
int number = int.Parse(textBoxNumber.Text);
// The Try-Parse Method
int.TryParse(textBoxNumber.Text, out number);
Есть ли какая-то форма проверки ошибок, такая как блок Try-Catch?
Parse
выдает исключение, если не может проанализировать значение, тогда как TryParse
возвращает bool
, указывающее, удалось ли это.
TryParse
не просто try
/catch
внутренне - весь смысл в том, что он реализован без исключений, чтобы он был быстрым. На самом деле, скорее всего, это реализовано так: внутри метод Parse
вызовет TryParse
, а затем выдаст исключение, если он вернет false
.
Короче говоря, используйте Parse
, если вы уверены, что значение будет действительным; в противном случае используйте TryParse
.
Если строку нельзя преобразовать в целое число, то
int.Parse()
вызовет исключениеint.TryParse()
вернет false (но не выдаст исключение)Метод TryParse позволяет проверить, можно ли что-то разобрать. Если вы попробуете Parse, как в первом случае, с недопустимым int, вы получите исключение, а в TryParse оно вернет логическое значение, позволяющее узнать, удалось ли синтаксический анализ или нет.
В качестве сноски: передача значения null большинству методов TryParse вызовет исключение.
TryParse и налог на исключения
Parse выдает исключение, если преобразование строки в указанный тип данных не удается, тогда как TryParse явно избегает выдачи исключения.
TryParse не возвращает значение, он возвращает код состояния, чтобы указать, был ли синтаксический анализ успешным (и не вызывает ли исключение).
Для справки, я тестирую два кода: просто попробуйте преобразовать строку в число, и если это не удастся, присвойте номеру ноль.
if (!Int32.TryParse(txt,out tmpint)) {
tmpint = 0;
}
и:
try {
tmpint = Convert.ToInt32(txt);
} catch (Exception) {
tmpint = 0;
}
Для С# лучшим вариантом является использование tryparse, потому что альтернатива try&Catch вызвала исключение
A first chance exception of type 'System.FormatException' occurred in mscorlib.dll
Тем не менее, это мучительно медленно и нежелательно, код не останавливается, если исключение Debug не разрешено для остановки с ним.
Я знаю, что это очень старый пост, но решил поделиться еще несколькими подробностями о Parse vs TryParse.
У меня был сценарий, в котором DateTime нужно преобразовать в String, и если datevalue null или string.empty мы столкнулись с исключением. Чтобы преодолеть это, мы заменили Parse на TryParse и получим дату по умолчанию.
Старый код:
dTest[i].StartDate = DateTime.Parse(StartDate).ToString("MM/dd/yyyy");
dTest[i].EndDate = DateTime.Parse(EndDate).ToString("MM/dd/yyyy");
Новый код:
DateTime startDate = default(DateTime);
DateTime endDate=default(DateTime);
DateTime.TryParse(dPolicyPaidHistories[i].StartDate, out startDate);
DateTime.TryParse(dPolicyPaidHistories[i].EndDate, out endDate);
Придется объявить другую переменную и использовать ее как Out для TryParse.
startDate
и endDate
как DateTime.TryParse
всегда будет перезаписывать их на DateTime.MinValue
. Если неверные представления даты должны быть преобразованы в другое значение, проверьте возвращаемое значение DateTime.TryParse
и, если оно ложно, установите значение явно.
- person Palec; 31.05.2017
DateTime?
(DateTime может принимать значение NULL)
- person Kiquenet; 10.06.2017
двойной.Разобрать("-"); вызывает исключение, а double.TryParse("-", out parsed); анализирует до 0, поэтому я думаю, что TryParse выполняет более сложные преобразования.
TryParse
возвращает true
или false
? Вот как вы узнаете, было ли оно действительным.
- person Paul Draper; 20.04.2013