Как я могу добавить пустую строку в свой StringBuilder?

Это известная «проблема», которая делает это:

sb.AppendLine();

... не добавит пустую строку, как можно было бы ожидать (как обсуждалось здесь, например).

Однако принято считать, что это сработает:

sb.AppendLine(Environment.NewLine);

... но это не работает для меня. У меня есть этот код:

for (int i = 0; i < listOfListItems.Count; i++)
{
    sb.AppendLine(Environment.NewLine);
    lc = listOfListItems[i];
    sb.AppendLine(String.Format(@"<p>Request date is {0}; Payee Name is {1}; Remit Address or Mail Stop is {2}; Last 4 of SSN or ITIN is {3}; 204 Submitted or on file is {4}; Requester Name is {5}; Dept or Div Name is {6}; Phone is {7}; Email is {8}</p>",
        lc.li_requestDate, lc.li_payeeName, lc.li_remitAddressOrMailStop, lc.li_last4SSNDigitsOrITIN, lc.li_204SubmittedOrOnFile, lc.li_requesterName, lc.li_deptDivName, lc.li_phone, lc.li_email));
}

Все данные добавляются в StringBuilder, а затем в сгенерированную форму, но между элементами списка нет пробелов - "sb.AppendLine(Environment.NewLine)" ничего не добавляет.

Что я должен сделать, чтобы установить линию между выходными данными отдельных элементов списка?


person B. Clay Shannon    schedule 09.04.2015    source источник
comment
Согласно сообщению, на которое вы ссылаетесь, sb.Append(Environment.NewLine) - это трюк (Append, а не AppendLine)   -  person Adam Plocher    schedule 09.04.2015
comment
@AdamPlocher StringBuilder.AppendLine просто звонит Append(Environment.NewLine). На самом деле, я думаю, что здесь что-то другое не так - у меня всегда работало AppendLine.   -  person Lucas Trzesniewski    schedule 09.04.2015
comment
@Lucas Да, я вижу здесь . Просто указал, что его вопрос ссылается на AppendLine вместо Append в этом сценарии. У меня никогда не было проблем с AppendLine(), но это определенно похоже на проблему, которая иногда существует...   -  person Adam Plocher    schedule 09.04.2015
comment
@ Адам Я не думаю, что есть проблема, Правин, вероятно, догадался, что не так с OP: свертывание пробелов в HTML.   -  person Lucas Trzesniewski    schedule 09.04.2015


Ответы (2)


StringBuilder.AppendLine добавляет \r\n в конец строки. Вам не нужно явно добавлять другой оператор, например StringBuilder.AppendLine(System.Environment.NewLine). Вы можете перепроверить это, преобразовав строку, возвращенную из StringBuilder, в массив символов, где вы можете увидеть новые строки.

В вашем примере похоже, что вы пытаетесь отобразить вывод в HTML (смотря на тег p в вашей строке), а новая строка не отображается в вашем HTML. Чтобы добиться этого, вы можете добавить br к своей строке.

sb.AppendLine("<br/>");

Возврат каретки (\r\n) не имеет значения в тегах HTML.

person Praveen Paulose    schedule 09.04.2015

Добавление к этому вопросу, несмотря на его возраст, потому что это первый результат Google.)

Другие варианты отображения пустого пространства:

  1. Оберните тег <p></p> тегом <pre> </pre>, например:

    sb.Append("<pre><p>").Append(aStringVariable).AppendLine("</p></pre>");
    
  2. Назначьте класс css этому элементу:

    <p class="preserveWhiteSpace">
    
    .preserveWhiteSpace{
    white-space: pre;
    }
    

    или, если вам нужны разрывы строк и перенос без переполнения контейнера объекта:

    .preserveWhiteSpace{
    white-space: pre-wrap;
    }
    
  3. Если вы форматируете html для электронной почты, а почтовый клиент не работает:

    sb.AppendLine("<p style="background-color: white; color: white;">.</p>")
    

    Это самый хакерский вариант, но поддержка html в почтовых клиентах, как правило, использует действительно старые стандарты html/css...

person user1431356    schedule 24.02.2020