У .NET я можу надати обидва \rабо \nрядкові літерали, але є спосіб вставити щось на зразок "нового рядка" спеціального символу, як Environment.NewLineстатичну властивість?
У .NET я можу надати обидва \rабо \nрядкові літерали, але є спосіб вставити щось на зразок "нового рядка" спеціального символу, як Environment.NewLineстатичну властивість?
Відповіді:
Ну, прості варіанти:
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);
Зауважте, що ви не можете зробити цей рядок постійним , оскільки значення Environment.NewLineбуде доступне лише під час виконання.
Environment.NewLine? Зовсім навпаки, це хороша практика використовувати його
Якщо ви хочете рядок const, що містить у собі Environment.NewLine, ви можете зробити щось подібне:
const string stringWithNewLine =
@"first line
second line
third line";
Оскільки це в рядку const, це робиться під час компіляції, тому інтерпретація нового рядка компілятора. Я, здається, не можу знайти посилання, що пояснює цю поведінку, але можу довести, що вона працює за призначенням. Я скомпілював цей код і в Windows, і в Ubuntu (з Mono), потім розібрав, і ось такі результати:

Як бачите, у Windows нові рядки трактуються як \ r \ n, а в Ubuntu як \ n
var sb = new StringBuilder();
sb.Append(first);
sb.AppendLine(); // which is equal to Append(Environment.NewLine);
sb.Append(second);
return sb.ToString();
first + Environment.NewLine + secondякий є більш ефективним та (IMO) легше читати?
String.Formatвийде одночасно 1 рядок (але це всередині дещо повільно через специфічні для культури конкатенації тощо), а конкатенація рядків - 1 в результаті + 1 тимчасова, правда?
String.Concatenate, що безпосередньо будує лише один вихідний рядок (IIRC, якщо рядки є буквальними, конкатенація робиться в компіляторі.
"a"+b+"c"+dтощо) за продуктивністю дорівнює одному? Або просто перетворений на String.Concatenate(a,b,c,d,etc), правда?
string.Formatу коментарі. З'єднання рядків не створюватиме тимчасових рядків, тому що компілятор буде викликати string.Concat(first, Environment.NewLine, second).
Ще один спосіб зручного розміщення 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
Можливо, той, хто зацікавився цим питанням, зацікавився б і наступним запитанням: Форматування іменних рядків у C #
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>";
static class MyClass
{
public const string NewLine="\n";
}
string x = "first line" + MyClass.NewLine + "second line"
Environment.NewLine- дивіться інші відповіді.
const string
новіші версії .net дозволяють використовувати $ перед літералом, що дозволяє використовувати змінні всередині:
var x = $"Line 1{Environment.NewLine}Line 2{Environment.NewLine}Line 3";
Якщо ви дійсно хочете, щоб рядок "Нова лінія" був постійним, тоді ви можете це зробити:
public readonly string myVar = Environment.NewLine;
Користувач ключового слова для читання лише в C # означає, що цю змінну можна призначити лише один раз. Ви можете знайти документацію по ньому тут . Це дозволяє оголосити постійну змінну, значення якої невідоме до часу виконання.
Якщо ви працюєте з веб-додатком, ви можете спробувати це.
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 />")
Якщо я розумію питання: Пара, "\r\n"щоб отримати новий рядок нижче в textbox. Мій приклад спрацював -
string s1 = comboBox1.Text; // s1 is the variable assigned to box 1, etc.
string s2 = comboBox2.Text;
string both = s1 + "\r\n" + s2;
textBox1.Text = both;
Типова відповідь може бути s1
s2 у text boxвикористанні певного типу стилю.