Ответы:
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
и, если оно ложно, установите значение явно.
DateTime?
( DateTime nullable )
double.Parse ("-"); вызывает исключение, а double.TryParse ("-", разобрано); анализирует до 0, поэтому я предполагаю, что TryParse выполняет более сложные преобразования.
TryParse
возвращается true
или false
? Вот как вы узнаете, было ли оно «действительным».