Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

  • 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.

двойной.Парс("-");поднимает исключение, а Double.trarse ("-", Out Parsed);Подготовки к 0, так что я думаю, что Tryparse делает более сложные преобразования.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top