ใน. 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
ในความคิดเห็น concatenation สตริงจะไม่ผลิตสตริงชั่วคราวใด ๆ 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 ( "รูปแบบ")]
การใช้งานนี้เห็นได้ชัดว่ามีประสิทธิภาพน้อยกว่าเพียงแค่สตริงรูปแบบ
บางทีใครที่สนใจในคำถามนี้ก็อาจสนใจคำถามต่อไปด้วยเช่นกัน: การจัดรูปแบบสตริงใน 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";
หากคุณต้องการสตริง New Line เป็นค่าคงที่จริงๆคุณสามารถทำได้ดังนี้:
public readonly string myVar = Environment.NewLine;
ผู้ใช้ของคำหลักแบบอ่านอย่างเดียวใน C # หมายความว่าตัวแปรนี้สามารถกำหนดให้หนึ่งครั้งเท่านั้น คุณสามารถค้นหาเอกสารเกี่ยวกับมันนี่ อนุญาตให้ประกาศตัวแปรคงที่ซึ่งไม่ทราบค่าจนกว่าจะถึงเวลาดำเนินการ
ฉันชอบมากกว่า "ทาง pythonic"
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);
หากคุณทำงานกับเว็บแอปพลิเคชันคุณสามารถลองสิ่งนี้ได้
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
รูปแบบที่กำหนดไว้
ที่นี่ Environment.NewLine ไม่ทำงาน
ฉันใส่ " < br / > " ในสตริงและทำงาน
Ex:
ltrYourLiteral.Text = "บรรทัดแรก <. br / > สายที่สอง.";