Відповіді:
Parseвикидає виняток, якщо він не може проаналізувати значення, тоді як TryParseповертає boolвказівку, чи вдалось це зробити.
TryParseне просто try/ catchвнутрішньо - вся суть у тому, що вона реалізується без винятків, щоб вона була швидкою. Насправді спосіб, який він, найімовірніше, реалізується - це те, що внутрішньо Parseметод зателефонує TryParseта викине виняток, якщо він повернеться false.
Коротше кажучи, використовуйте, Parseякщо ви впевнені, що значення буде дійсним; в іншому випадку використовувати TryParse.
Якщо рядок неможливо перетворити на ціле число, то
int.Parse() викине винятокint.TryParse() поверне помилковий (але не кине виняток)Метод TryParse дозволяє перевірити, чи щось піддається синтаксичному аналізу. Якщо ви спробуєте Parse як у першому випадку з недійсним int, ви отримаєте виняток під час TryParse, він повертає булевий сигнал, повідомляючи вам про те, чи вдалося парса чи ні.
Як виноска, перехід у нульове значення для більшості методів TryParse призведе до виключення.
TryParse та податок на виняток
Синтаксичний аналіз видаляє виняток, якщо перетворення з рядка у вказаний тип даних не вдається, тоді як TryParse явно уникає викидання виключення.
TryParse не повертає значення, він повертає код статусу, щоб вказати, чи вдалося аналізувати (і не кидає виняток).
Для запису я тестую два коди: Це просто спробуйте перетворити з рядка в число, а якщо воно не вдалося, то призначте число нулю.
if (!Int32.TryParse(txt,out tmpint)) {
tmpint = 0;
}
і:
try {
tmpint = Convert.ToInt32(txt);
} catch (Exception) {
tmpint = 0;
}
Для c # найкращим варіантом є використання трипарсу, оскільки альтернатива 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.TryParse ("-", розібраний); аналізує 0, тому я думаю, що TryParse робить більш складні перетворення.
TryParseповертається trueчи false? Ось як ви дізнаєтесь, чи було це "дійсно".