TryParse
и Regex.IsMatch
используются для двух принципиально разных вещей. Regex.IsMatch
сообщает вам, соответствует ли рассматриваемая строка некоторому конкретному шаблону. Возвращает ответ да / нет. TryParse
на самом деле преобразует значение, если это возможно, и сообщает вам, удалось ли оно.
Если вы не очень осторожны при создании регулярного выражения, Regex.IsMatch
может вернуть true
, когда TryParse
вернет false
. Например, рассмотрим простой случай разбора byte
. С TryParse
у вас есть:
byte b;
bool isGood = byte.TryParse(myString, out b);
Если значение в myString
находится в диапазоне от 0 до 255, TryParse
вернет true
.
Теперь давайте попробуем с Regex.IsMatch
. Давайте посмотрим, каким должно быть это регулярное выражение? Мы не можем просто сказать @"\d+"
или даже @\d{1,3}"
. Задание формата становится очень сложной работой. Вы должны обрабатывать начальные 0, начальные и конечные пробелы и разрешать 255
, но не 256
.
И это только для анализа 3-значного числа. Правила становятся еще сложнее, когда вы анализируете int
или long
.
Регулярные выражения отлично подходят для определения формы . Они сосут, когда дело доходит до определения значения . Поскольку все наши стандартные типы данных имеют ограничения, определение его значения является частью выяснения, является ли число допустимым.
Вам лучше использовать TryParse
всякий раз, когда это возможно, хотя бы для того, чтобы избавить себя от головной боли, пытаясь придумать надежное регулярное выражение, которое выполнит проверку. Вполне вероятно (я бы сказал, почти наверняка), что конкретный TryParse
для любого из нативных типов будет выполняться быстрее, чем эквивалентное регулярное выражение.
Выше говорилось, что я, вероятно, потратил больше времени на этот ответ, чем ваша веб-страница потратит на выполнение вашего TryParse
или Regex.IsMatch
- всего за всю свою жизнь. Время выполнения этих задач настолько мало в контексте всего остального, что делает ваш веб-сайт, и каждый раз, когда вы тратите на размышления о проблеме, теряется.
Используйте TryParse
, если можете, потому что это проще. В противном случае используйте Regex
.