Мне интересно, если этот код ...
StringBuilder sb = new StringBuilder("Please read the following messages.");
... инициализирует sb
буфером, точно таким же, как строка, переданная конструктору. С одной стороны, это казалось бы самым логичным. С другой стороны, кажется, что это своего рода поражение цели класса StringBuilder
для одного из его наиболее распространенных применений, которое заключается в обеспечении изменчивости, чтобы сделать повторные добавления более эффективными. (Самый первый вызов Append
, если ответ на мой вопрос «да», потребует sb
для изменения размера.)
Опять же, я полагаю, можно было бы рассматривать это как аналог конструктора для List<T>
, который принимает IEnumerable<T>
в качестве параметра. Возможно, в этом случае предполагается, что вы не планируете добавление много, а скорее манипулирование тем, что уже есть.
Единственным реальным исследованием, которое я провел по этому вопросу, была проверка документации MSDN на StringBuilder , которая не дала ответа (он говорит, что конструктор инициализирует экземпляр «используя указанную строку»). но не указывает, как используется строка).
РЕДАКТИРОВАТЬ : Так что это "зависит от реализации" ... никому это не кажется странным? Я имею в виду, что цель класса StringBuilder
- предложить альтернативу выполнению большого количества операций над string
, создавая массу неизменных string
экземпляров на этом пути; следовательно, это для эффективности . Мне кажется, что поведение этого конструктора должно быть определено, чтобы разработчик мог принять взвешенное решение о том, как его использовать, независимо от платформы.
Я имею в виду, что является реализованным Microsoft определенным образом; они могли бы легко поместить это в документацию (заставив другие реализации последовать их примеру). Просто личный источник недоумения ...