8 ответов:
Parseвыдает исключение, если оно не может разобрать значение, тогда какTryParseвозвращает aboolуказывает, удалось ли это.
TryParseне толькоtry/catchвнутренне-весь смысл в том, что он реализуется без исключений, так что это быстро. На самом деле, как это, скорее всего, реализовано, что внутреннеParseметод будем называтьTryParseа затем бросить исключение, если оно возвращаетfalse.в двух словах, использовать
ParseЕсли вы уверены, что значение будет действительным; в противном случае используйтеTryParse.
Если строка не может быть преобразована в целое число, то
- int.Parse () выдаст исключение
- int.TryParse () вернет false (но не бросит исключение)
метод TryParse позволяет проверить, является ли что-то анализируемым. Если вы попытаетесь выполнить синтаксический анализ, как в первом случае с недопустимым 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; }для c# лучшим вариантом является использование tryparse, потому что try & Catch alternative бросил исключение
A first chance exception of type 'System.FormatException' occurred in mscorlib.dllчто это болезненно медленно и нежелательно, однако, код не останавливается, если исключение отладки не установлено для остановки с ним.
Я знаю, что это очень старый пост, но подумал о том, чтобы поделиться несколькими подробностями о Parse vs TryParse.
у меня был сценарий, где DateTime должен быть преобразован в строку и если datevalue null или string.пустые мы столкнулись с исключением. Чтобы преодолеть это, мы заменили 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);нужно объявить другую переменную и использовать ее как выход для TryParse.
двойной.Parse (" - " ); вызывает исключение, в то время как двойной.TryParse (" - " , out parsed); разбирает до 0 поэтому я думаю, что TryParse делает более сложные преобразования.
Comments