Вы должны войти, чтобы создавать сообщения и темы.

Конвертация чисел в строку.

Всем привет.✋
Недавно услышал такое мнение что никогда не стоит конвертировать цифры (int) в строки (string). Потому что:
1) Это медленно 🤷‍♂️
2) Не стоит забивать "кучу (heap)" для тривиальных задач
3) Строка - это отображение числа. А у отображения есть такое свойство, как формат. Который может быть разным в разных культурах (см. региональные настройки).
Например, число один миллион в некоторых культурах отображается как "1,000,000". В нем 7 чисел, но в строке, его отображающей, девять символов. В результате программа работает не правильно.
Будет весело, если вы разрабатываете какое-нибудь приложение для работы с финансами, например.

Я только начинающий разработчик, но хотелось бы узнать подробнее об конвертации.
Всем хорошего дня😉

Vanya, привет 🖐

  1. Нет, это не медленно. И если пытаться доказать обратное, то есть страница, предоставленная Мной на JailbreakVideo, где разницу можно ощутить как в физической, так и оперативной памяти. Но это всё относительно. Смотря о чём программа.
  2. Опять же мусор и всё, что связано с памятью зависит от самой программы.
  3. Формат выставляется в настройках своей же программы разработчиком и по желанию. Запятые и точки расставляет сама операционная система и она сама понимает для какой локализации какие разделите нужны и как они будут выглядеть.
Цитата: Vanya от 07.06.2021, 16:08

никогда не стоит конвертировать цифры (int) в строки (string)

Никогда – слишком громко сказано.
Я бы сказал, что если в этом нет необходимости, лучше избегать.
Это всё равно, что заявить никогда не используйте Скопированоtry Скопированоcatch, а всегда юзайте Скопированоif Скопированоelse.
Нужно стараться продумывать все сценарии и если попадается такой, где без Скопированоcatch не обойтись, то будешь писать Скопированоtry Скопированоcatch.
То же самое с СкопированоToString();

Лайкнули Oleg и Francesco
OlegFrancesco
В любой непонятной ситуации переходи на beta  © Win 10 Tweaker

Спасибо большое за ответ. 
Всё понял😉

Лайкнул XpucT
XpucT

Здравствуйте.
Поддерживаю XpucT и немного дополню от себя:
1. Любая операция занимает процессорное время. Если имеется в виду переопределение Object.ToString в System.Int32, то это создание новой строки, содержащей строковое представление – необходимый способ форматирования, его не избежать.
Нужно понимать, что в .NET API сценарии вызова перегруженных версий методов, таких как Console.Write() \ WriteLine(), String.Format() и т.д., фактически преобразуют число (если мы говорим о передаче числа) в строку, а потом, как и все строки, в массив символов.
В этом легко убедиться, просмотрев цепочку вызовов в исходном коде (например, на Microsoft Reference Source или из GAC в dotPeek):

// Writes the text representation of an integer to the text stream. The
// text representation of the given value is produced by calling the
// Int32.ToString() method.
//
public virtual void Write(int value) {
    Write(value.ToString(FormatProvider));
}

Если же Вы хотите хранить числовые данные как строки и преобразовывать их между собой, то, вероятно, это не лучший способ, так как теряется безопасность в отношении типов и появляются накладные расходы.
2. Как правило уже решено, где будут хранится разные сущности и других вариантов нет. Конечно, можно запаковывать структуры в управляемой куче, но это извращение. И также появляются накладные расходы ещё и на работу сборщика мусора.
3. Строка – это последовательная коллекция символов. Проблема может быть только при некоторых I/O операциях, скажем, при привязке значения свойства типа DateTime к таблице в WPF, что весьма легко определяется и меняется.
В целом, здесь скорее вопрос необходимости таких представлений. Лучше разделять эти понятия, но помнить, что преобразование в строки происходит много где и зачастую не явно.

Лайкнул Oleg
Oleg