Я больше смотрю на сценарий, чем на производительность; если ожидаемое поведение является допустимым, я обычно использую Parse (или ParseExact, если доступно) и отпускаю исключение. Если мне не нужно поднять специфическую ошибку, в этом случае TryParse удобен.
Если данные могут быть (скажем) целыми числами, тогда TryParse предпочтительнее, чем Parse + catch.
С LINQ-to-XML: not parse; вместо этого используйте предоставленные операторы статического преобразования; так что вместо:
...
select int.Parse(node.Value);
Вы должны использовать
...
select(int) node;
это еще более важно для таких вещей, как DateTime, поскольку учитывает стандартные форматы XML. Он также делает «ожидаемую» вещь, если узел не существует (то есть node
равен null
):
select (int?)node;
вернет значение null
вместо броска NullReferenceException
(что и сделает node.Value
). Для большинства ожидаемых типов данных существуют операторы статического преобразования.