Parse v. TryParse
В чем разница между Parse() и TryParse()?
int number = int.Parse(textBoxNumber.Text);
// The Try-Parse Method
int.TryParse(textBoxNumber.Text, out number);
Есть ли какая-то форма проверки ошибок, например, Try-Catch Block?
Ответы
Ответ 1
Parse
генерирует исключение, если оно не может проанализировать значение, тогда как TryParse
возвращает a bool
, указывающее, удалось ли это сделать.
TryParse
не только try
/catch
внутренне - вся суть в том, что он реализован без исключений, чтобы он был быстрым. Фактически, как это наиболее вероятно реализовано, внутренне метод Parse
вызывает TryParse
, а затем генерирует исключение, если оно возвращает false
.
В двух словах используйте Parse
, если вы уверены, что значение будет действительным; в противном случае используйте TryParse
.
Ответ 2
Если строка не может быть преобразована в целое число, то
- int.Parse() выкинет исключение
- int.TryParse() вернет false (но не выбрасывает исключение)
Ответ 3
Метод TryParse позволяет проверить, что-то обрабатывается. Если вы попробуете Parse, как в первом экземпляре с недопустимым int, вы получите исключение в TryParse, оно возвращает логическое значение, позволяющее узнать, удалось ли выполнить синтаксический анализ или нет.
Как сноска, передача null в большинство методов TryParse приведет к исключению.
Ответ 4
TryParse и налог на исключение
Параметр генерирует исключение, если преобразование из строки в указанный тип данных не выполняется, тогда как TryParse явно избегает бросать исключение.
Ответ 5
TryParse не возвращает значение, он возвращает код состояния, чтобы указать, удалось ли синтаксический анализ (и не генерирует исключение).
Ответ 6
Для записи я тестирую два кода: просто попробуйте преобразовать из строки в число, и если она не удалась, присвойте номер нулю.
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 не разрешено для остановки с ним.
Ответ 7
Я знаю его очень старый пост, но подумал об обмене несколькими подробностями о 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 for TryParse.
Ответ 8
double.Parse( "-" ); вызывает исключение, тогда как
double.TryParse( "-", без разбора); анализирует до 0
поэтому я думаю, что TryParse выполняет более сложные преобразования.