Как вставить новую строку в строковый литерал? - PullRequest
140 голосов
/ 03 ноября 2010

В .NET я могу предоставить как \r, так и \n строковые литералы, но есть способ вставить что-то вроде специального символа "новая строка", например Environment.NewLine статическое свойство?

Ответы [ 12 ]

293 голосов
/ 03 ноября 2010

Ну, простые варианты:

  • string.Format:

    string x = string.Format("first line{0}second line", Environment.NewLine);
    
  • Конкатенация строк:

    string x = "first line" + Environment.NewLine + "second line";
    
  • Строковая интерполяция (в C # 6 и выше):

    string x = $"first line{Environment.NewLine}second line";
    

Вы также можете использовать \ n везде и заменить:

string x = "first line\nsecond line\nthird line".Replace("\n",
                                                         Environment.NewLine);

Обратите внимание, что вы не можете сделать это строкой constant , потому что значение Environment.NewLine будет доступно только во время выполнения.

29 голосов
/ 09 мая 2012

Если вам нужна константная строка, содержащая в себе Environment.NewLine, вы можете сделать что-то вроде этого:

const string stringWithNewLine =
@"first line
second line
third line";

РЕДАКТИРОВАТЬ

Поскольку это константная строка, она выполняется ввремя компиляции, поэтому это интерпретатор новой строки.Кажется, я не могу найти ссылку, объясняющую это поведение, но могу доказать, что оно работает как задумано.Я скомпилировал этот код как для Windows, так и для Ubuntu (с Mono), затем разобрал, и вот результаты:

Disassemble on Windows Disassemble on Ubuntu

Как видите, в Windows переводы строк интерпретируются как\ r \ n и в Ubuntu как \ n

12 голосов
/ 03 ноября 2010
var sb = new StringBuilder();
sb.Append(first);
sb.AppendLine(); // which is equal to Append(Environment.NewLine);
sb.Append(second);
return sb.ToString();
3 голосов
/ 07 декабря 2014

Еще один способ удобного размещения Environment.NewLine в формате строки. Идея состоит в создании метода расширения строки, который форматирует строку как обычно, но также заменяет {nl} в тексте на Environment.NewLine

Использование

   " X={0} {nl} Y={1}{nl} X+Y={2}".FormatIt(1, 2, 1+2);
   gives:
    X=1
    Y=2
    X+Y=3

код

    ///<summary>
    /// Use "string".FormatIt(...) instead of string.Format("string, ...)
    /// Use {nl} in text to insert Environment.NewLine 
    ///</summary>
    ///<exception cref="ArgumentNullException">If format is null</exception>
    [StringFormatMethod("format")]
    public static string FormatIt(this string format, params object[] args)
    {
        if (format == null) throw new ArgumentNullException("format");

        return string.Format(format.Replace("{nl}", Environment.NewLine), args);
    }

Примечание

  1. Если вы хотите, чтобы ReSharper выделил ваши параметры, добавьте атрибут к методу выше

    [StringFormatMethod ( "формат")]

  2. Эта реализация явно менее эффективна, чем просто String.Format

  3. Может быть, тот, кто интересуется этим вопросом, будет также заинтересован в следующем вопросе: Форматирование именованных строк в C #

2 голосов
/ 03 февраля 2015
string myText =
    @"<div class=""firstLine""></div>
      <div class=""secondLine""></div>
      <div class=""thirdLine""></div>";

это не так:

string myText =
@"<div class=\"firstLine\"></div>
  <div class=\"secondLine\"></div>
  <div class=\"thirdLine\"></div>";
1 голос
/ 26 сентября 2016

более новые версии .net позволяют вам использовать $ перед литералом, который позволяет вам использовать переменные внутри следующим образом:

var x = $"Line 1{Environment.NewLine}Line 2{Environment.NewLine}Line 3";
1 голос
/ 03 ноября 2010
static class MyClass
{
   public const string NewLine="\n";
}

string x = "first line" + MyClass.NewLine + "second line"
0 голосов
/ 17 июля 2018

Здесь Environment.NewLine не работает.

Я положил « <<em> br / > » в строку и работал.

Пример:

ltrYourLiteral.Text = "Первая строка. <<em> br / > Вторая строка.";

0 голосов
/ 07 октября 2016

Если вы работаете с веб-приложением, вы можете попробовать это.

StringBuilder sb = new StringBuilder();
sb.AppendLine("Some text with line one");
sb.AppendLine("Some mpre text with line two");
MyLabel.Text = sb.ToString().Replace(Environment.NewLine, "<br />")
0 голосов
/ 30 июля 2016

Если я понимаю вопрос: пара "\ r \ n", чтобы получить эту новую строку ниже в текстовом поле.Мой пример сработал -

string s1 = comboBox1.Text;// s1 - это переменная, назначенная блоку 1 и т. д. string s2 = comboBox2.Text;

string both = s1 + "\ r \ n" + s2;textBox1.Text = оба;Типичным ответом может быть s1 s2 в текстовом поле с использованием определенного стиля шрифта.

...