В .NET я могу предоставить строковые литералы \r
или \n
, но есть способ вставить
что-то вроде специального символа "новая строка", такого как статическое свойство Environment.NewLine
?
Как вставить новую строку в строковый литерал?
Ответ 1
Ну, простые варианты:
-
string.Format
:string x = string.Format("first line{0}second line", Environment.NewLine);
-
Конкатенация строк:
string x = "first line" + Environment.NewLine + "second line";
-
Строковая интерполяция (в С# 6 и выше):
string x = $"first line{Environment.NewLine}second line";
Вы также можете использовать \n всюду и заменить:
string x = "first line\nsecond line\nthird line".Replace("\n",
Environment.NewLine);
Обратите внимание, что вы не можете сделать это строковой константой, потому что значение Environment.NewLine
будет доступно только во время выполнения.
Ответ 2
Если вам нужна строка const, содержащая Environment.NewLine, вы можете сделать что-то вроде этого:
const string stringWithNewLine =
@"first line
second line
third line";
ИЗМЕНИТЬ
Так как это в строке const, это выполняется во время компиляции, поэтому это интерпретация компилятора новой строки. Кажется, я не могу найти ссылку, объясняющую это поведение, но могу доказать, что она работает по назначению. Я скомпилировал этот код как на Windows, так и на Ubuntu (с помощью Mono), затем разобрал и это результаты:
Как вы можете видеть, в Windows новые строки интерпретируются как \r\n и на Ubuntu как\n
Ответ 3
var sb = new StringBuilder();
sb.Append(first);
sb.AppendLine(); // which is equal to Append(Environment.NewLine);
sb.Append(second);
return sb.ToString();
Ответ 4
Еще один способ удобного размещения 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);
}
Примечание
-
Если вы хотите, чтобы ReSharper выделил ваши параметры, добавьте атрибут выше описанного метода
[StringFormatMethod ( "Формат" )]
-
Эта реализация явно менее эффективна, чем просто String.Format
-
Возможно, тот, кого интересует этот вопрос, будет интересовать и следующий вопрос: Именованное форматирование строк в С#
Ответ 5
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>";
Ответ 6
static class MyClass
{
public const string NewLine="\n";
}
string x = "first line" + MyClass.NewLine + "second line"
Ответ 7
Если вы действительно хотите, чтобы строка New Line была константой, вы можете сделать это:
public readonly string myVar = Environment.NewLine;
Пользователь ключевого слова readonly в С# означает, что эта переменная может быть назначена только один раз. Здесь вы можете найти документацию здесь. Он позволяет объявлять постоянную переменную, значение которой неизвестно до времени выполнения.
Ответ 8
Мне больше нравится "pythonic way"
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);
Ответ 9
Если я понимаю вопрос: Пара "\ r\n", чтобы получить эту новую строку ниже в текстовом поле. Мой пример работал -
string s1 = comboBox1.Text;//s1 - это переменная, назначенная в поле 1, и т.д. string s2 = comboBox2.Text;
string both = s1 + "\ r\n" + s2; textBox1.Text = both; Типичным ответом может быть s1 s2 в текстовом поле, используя стиль определенного типа.
Ответ 10
Новые версии .net позволяют использовать $перед литералом, который позволяет использовать переменные внутри, как показано ниже:
var x = $"Line 1{Environment.NewLine}Line 2{Environment.NewLine}Line 3";
Ответ 11
Если вы работаете с веб-приложением, вы можете попробовать это.
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 />")
Ответ 12
Вы можете вставить в строку тег HTML Break Line. Когда браузер отобразит его, у вас будет новая строка.
string variable = "Line one Content" + "<br>" + "Line two Content";
Это будет отображаться как:
Line one Content
Line two Content
Я не нашел браузер, где это не работает.