Я считаю, что ответ зависит от контекста.
Если я преобразую (например) DataRow
в объект, у меня будет много вызовов Convert.ToXXX
, поэтому я бы использовал Convert.ToInt32
, потому что это согласуется с другими утверждениями, связанными с этим преобразованием.
В других ситуациях, если я хочу вызвать исключение, когда строка не анализируется (без сбоев), я буду использовать int.Parse
, потому что это вызывает исключение, а int.TryParse
имеет тенденцию генерировать более уродливый код (Я никогда не был поклонником наших параметров)
И если я просто хочу указать какое-то значение по умолчанию, если строка не анализируется, я буду использовать int.TryParse
, потому что в противном случае мне придется обрабатывать исключение самостоятельно, а это дорого и уродливо.
Однако, если вы не вызываете сайт синтаксического анализа миллиарды раз, я был бы удивлен, увидев заметную разницу во времени между любым из трех форматов, поэтому я бы предпочел более читаемый фрагмент кода, чем немного более быстрый вариант.