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 выполняет более сложные преобразования.