Почему в CoreCLR Int32.TryParse сделано не самым оптимальным образом?

В CoreCLR, реализации метода Int32.TryParse не является оптимальным по следующим причинам:

1. Наличие лишней проверки аргументов: Метод Int32.TryParse проверяет аргументы на null и генерирует исключение ArgumentNullException, если они равны null. В случае с TryParse, эта проверка излишняя, так как данный метод не может изменить значения аргументов типа int. Вместо этого, разработчики могли бы предоставить перегруженный метод TryParse, который принимает out параметры и не производит проверку на null для этих параметров.

2. Использование StringBuilder для построения временной строки: В Int32.TryParse используется объект StringBuilder для построения временной строки числа, которая затем передается в метод Int32.Parse. Использование StringBuilder в данном случае является неэффективным и избыточным, так как вместо этого можно было использовать массив символов (char[]) или просто не конвертировать в строку вообще.

3. Использование проверки длины строки: При внутреннем вызове Int32.Parse, осуществляется проверка длины временной строки числа. Если длина строки равна 0, то метод возвращает false. Однако, такая проверка является лишней, так как в Parse также происходит проверка наличия цифр в строке числа, которая выполнится после проверки длины строки. Это приводит к двойной проверке и избыточным операциям.

4. Обработка исключений: В случае, если в процессе парсинга происходит ошибка, например, когда строка содержит некорректное представление числа, Int32.TryParse генерирует исключение FormatException. Однако, в некоторых случаях, возникновение исключения может быть нежелательным из-за его накладных расходов. Кроме того, в случае использования TryParse в цикле для парсинга большого количества чисел, генерация исключения может существенно замедлить процесс. Разработчики могли бы предоставить перегруженный метод TryParse, который вместо исключений возвращал бы bool значение, указывающее на успех или неудачу операции парсинга.

Общим результатом этих неоптимальных решений является лишний overhead, медленная производительность и избыточное использование ресурсов при использовании метода Int32.TryParse в сравнении с оптимальными решениями.