как вставить новую строку в строковый литерал?

<p>в .net я могу предоставить строковые литералы <code>\r</code> или <code>\n</code>, но есть способ вставить что-то вроде специального символа «новая строка», например статическое свойство <code>environment.newline</code>?</p>

<p>ну, простые варианты:</p><ul> <li><p><code>string.format</code>:</p> <pre><code>string x = string.format("first line{0}second line", environment.newline); </code></pre></li> <li><p>конкатенация строк:</p> <pre><code>string x = "first line" + environment.newline + "second line"; </code></pre></li> <li><p>строковая интерполяция (в c # 6 и выше):</p> <pre><code>string x = $"first line{environment.newline}second line";  вы также можете использоватьn везде и заменить:string x = "first linensecond linenthird line".replace("n", environment.newline); обратите внимание, что вы не можете сделать это строкой константой , потому что значение environment.newline будет доступно только во время выполнения.

если вам нужна константная строка, содержащая в себе environment.newline, вы можете сделать что-то вроде этого:const string stringwithnewline = @"first line second line third line"; правкатак как это в константной строке, это делается во время компиляции, поэтому это интерпретатор новой строки для компилятора. кажется, я не могу найти ссылку, объясняющую это поведение, но могу доказать, что оно работает как задумано. я скомпилировал этот код на windows и ubuntu (с mono), затем разобрал, и вот результаты:<img src="https://i.stack.imgur.com/0id1q.png" alt="disassemble on windows"> <img src="https://i.stack.imgur.com/rszcx.png" alt="disassemble on ubuntu">как видите, в windows переводы строк интерпретируются какrn, а в ubuntu - какn

var sb = new stringbuilder(); sb.append(first); sb.appendline(); // which is equal to append(environment.newline); sb.append(second); return sb.tostring(); 

еще один способ удобного размещения environment.newline в формате string . идея состоит в том, чтобы создать метод расширения строки, который форматирует строку как обычно, но также заменяет {nl} в тексте на environment.newline<strong>использование</strong> " x={0} {nl} y={1}{nl} x+y={2}".formatit(1, 2, 1+2); gives: x=1 y=2 x+y=3 <strong>код</strong> ///<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); } <strong>заметка</strong> если вы хотите, чтобы resharper выделил ваши параметры, добавьте атрибут к методу выше [stringformatmethod ( "формат")] эта реализация явно менее эффективна, чем просто string.format  может быть, тот, кто заинтересован в этом вопросе, также заинтересовался бы следующим вопросом: <a href="https://stackoverflow.com/questions/159017/named-string-formatting-in-c-sharp">форматирование именованных строк в c #  

string mytext = @"<div class=""firstline""> <div class=""secondline""> <div class=""thirdline"">"; <blockquote> это не то: </blockquote>string mytext = @"<div class="firstline"> <div class="secondline"> <div class="thirdline">"; 

static class myclass { public const string newline="n"; } string x = "first line" + myclass.newline + "second line" 

более новые версии .net позволяют вам использовать $ перед литералом, который позволяет вам использовать переменные внутри следующим образом:</p><pre><code>var x = $"line 1{environment.newline}line 2{environment.newline}line 3"; </code></pre>

<p>если вы действительно хотите, чтобы строка new line была константой, вы можете сделать это:</p><pre><code>public readonly string myvar = environment.newline; </code></pre><p>пользователь ключевого слова readonly в c # означает, что эта переменная может быть назначена только один раз. вы можете найти документацию по нему <a href="https://msdn.microsoft.com/en-us/library/acdd6hb7.aspx">здесь</a> . это позволяет объявлять постоянную переменную, значение которой неизвестно до времени выполнения.</p>

<p>если вы работаете с веб-приложением, вы можете попробовать это.</p><pre><code>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 />") </code></pre>

<p>если я понимаю вопрос: пара "\ r\n", чтобы получить эту новую строку ниже в текстовом поле. мой пример сработал -</p><p>строка s1 = combobox1.text; // s1 - это переменная, назначенная блоку 1 и т. д строка s2 = combobox2.text;</p><p>строка оба = s1 + "\ r\n" + s2; textbox1.text = both; типичным ответом может быть s1 s2 в текстовом поле, используя определенный стиль шрифта.</p>

<p>мне больше нравится "питонский путь"</p><pre><code>list<string> lines = new list<string> { "line1", "line2", string.format("{0} - {1} | {2}", somevar, othervar, thirdvar ) }; if(foo) lines.add("line3"); return string.join(environment.newline, lines); </code></pre>