Re[4]: Почему в C# не любят кастомные операторы?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.01.23 10:12
Оценка: +1
Здравствуйте, Baiker, Вы писали:


B>Не понял связи SB и дженериков.

Подавляющая часть использования стрингбилдера в прикладных программах — склейка массива строк в одну. Для этого есть string.Join и он даже чуть быстрее работает, чем цикл в билдере. Но до .NET 3.5 примерно приходилось писать циклы и перекладывать строки из какогонить datatable в массив руками. Linq эту задачу значительно оптимизировал, появился string.Join(IEnumerable<T>) и количество использований стрингбилдера упало до нормального уровня.

B>ВОТ! Про что и речь. Ума содрать жабу и выдать за C# — хватило, а написать эффективный манипулятор строками — нет. Потому и позорное пятно. Да ещё и книжек с библиотеками понаписали, где юзается SB. Новичок читает и не понимает, за каким фигом для строк требуется ещё и отдельный "эффективный класс".


Нет, речь не про это. Стрингбилдер это эффективный низкоуровневый инструмент. Он всегда таким был. На некоторых сценариях он обгонял std:string из C++ еще во времена .NET 2.0

Стрингбилдер помогает когда надо генерировать текст из объектов — HTML, сериализация, кодогенерация итд. Но это в основном внутренний инструмент для разработчика фреймворка.
Для прикладной программы сейчас лучше использовать интерполяцию или string.join (ЧСХ оба внутри используют стрингбилдеры), а если надо много и быстро, то Memory<char> и ручное копирование если это подходит.

Единственное что плохо, что с самого начала .NET авторы книжек толкали идею что "строки плохо и медленно, стрингбилдер хорошо" и это тянется до сих пор. До смешного бывает: я вижу код, где вместо конкатенации трех строковых переменных люди городят стрингбилдеры.
Отредактировано 26.01.2023 17:02 VladD2 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.