Parse v. TryParse - PullRequest
       42

Parse v. TryParse

100 голосов
/ 22 января 2009

В чем разница между Parse () и TryParse ()?

int number = int.Parse(textBoxNumber.Text);

// The Try-Parse Method
int.TryParse(textBoxNumber.Text, out number);

Существует ли какая-либо форма проверки ошибок, например блок Try-Catch?

Ответы [ 8 ]

141 голосов
/ 22 января 2009

Parse создает исключение, если не может проанализировать значение, тогда как TryParse возвращает bool, указывающее, успешно ли оно выполнено.

TryParse не просто try / catch внутри - весь смысл в том, что он реализован без исключений, так что это быстро. Фактически наиболее вероятным способом реализации этого метода является то, что метод Parse внутренне вызовет TryParse и затем выдаст исключение, если он вернет false.

В двух словах, используйте Parse, если вы уверены, что значение будет правильным; в противном случае используйте TryParse.

21 голосов
/ 22 января 2009

Если строка не может быть преобразована в целое число, тогда

  • int.Parse() сгенерирует исключение
  • int.TryParse() вернет false (но не выбрасывает исключение)
3 голосов
/ 22 января 2009

TryParse и налог на исключение

Анализ разбрасывает исключение, если преобразование из строки в указанный тип данных завершается неудачно, тогда как TryParse явно избегает создания исключения.

3 голосов
/ 22 января 2009

Метод TryParse позволяет проверить, является ли что-то анализируемым. Если вы попробуете Parse, как в первом случае, с недопустимым int, вы получите исключение, а в TryParse он возвращает логическое значение, сообщающее, успешно ли выполнен анализ.

В качестве сноски, передача нулевого значения большинству методов TryParse вызовет исключение.

0 голосов
/ 31 мая 2017

Я знаю, что это очень старый пост, но думал поделиться несколькими подробностями о 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.

0 голосов
/ 18 февраля 2012

Для записи, я тестирую два кода: они просто пытаются преобразовать строку в число, а в случае неудачи присваивают номер нулю.

        if (!Int32.TryParse(txt,out tmpint)) {
            tmpint = 0;
        }

и

        try {
            tmpint = Convert.ToInt32(txt);
        } catch (Exception) {
            tmpint = 0;
        }

Для c # лучшим вариантом является использование tryparse, поскольку альтернатива try & Catch выдает исключение

A first chance exception of type 'System.FormatException' occurred in mscorlib.dll

То, что это мучительно медленно и нежелательно, однако, код не останавливается, если исключение Debug не остановлено с ним.

0 голосов
/ 22 июля 2011

double.Parse ( "-"); выдвигает исключение, в то время как double.TryParse ("-", out parsed); разбирает до 0 так что я думаю, что TryParse делает более сложные преобразования.

0 голосов
/ 22 января 2009

TryParse не возвращает значение, оно возвращает код состояния, указывающий, успешно ли выполнен анализ (и не генерирует ли исключение).

...