Trong .NET tôi có thể cung cấp cả hai \r
hoặc \n
chuỗi ký tự, nhưng có cách nào để chèn một ký tự đặc biệt như "dòng mới" như thuộc tính Environment.NewLine
tĩnh không?
Trong .NET tôi có thể cung cấp cả hai \r
hoặc \n
chuỗi ký tự, nhưng có cách nào để chèn một ký tự đặc biệt như "dòng mới" như thuộc tính Environment.NewLine
tĩnh không?
Câu trả lời:
Vâng, các tùy chọn đơn giản là:
string.Format
:
string x = string.Format("first line{0}second line", Environment.NewLine);
Nối chuỗi:
string x = "first line" + Environment.NewLine + "second line";
Nội suy chuỗi (trong C # 6 trở lên):
string x = $"first line{Environment.NewLine}second line";
Bạn cũng có thể sử dụng \ n ở mọi nơi và thay thế:
string x = "first line\nsecond line\nthird line".Replace("\n",
Environment.NewLine);
Lưu ý rằng bạn không thể đặt chuỗi này thành hằng số , vì giá trị của Environment.NewLine
sẽ chỉ khả dụng tại thời điểm thực hiện.
Environment.NewLine
? Hoàn toàn ngược lại, đó là một cách thực hành tốt để sử dụng nó
Nếu bạn muốn có một chuỗi const có chứa Môi trường.NewLine trong đó, bạn có thể làm một cái gì đó như thế này:
const string stringWithNewLine =
@"first line
second line
third line";
Vì đây là trong một chuỗi const nên nó được thực hiện trong thời gian biên dịch do đó nó là sự giải thích của người biên dịch về một dòng mới. Tôi dường như không thể tìm thấy một tài liệu tham khảo giải thích hành vi này, nhưng, tôi có thể chứng minh nó hoạt động như dự định. Tôi đã biên dịch mã này trên cả Windows và Ubuntu (với Mono) sau đó tháo rời và đây là kết quả:
Như bạn có thể thấy, trong dòng mới của Windows được hiểu là \ r \ n và trên Ubuntu là \ 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
cái nào hiệu quả hơn và (IMO) dễ đọc hơn?
String.Format
sẽ tạo ra 1 chuỗi cùng một lúc (nhưng bên trong nó hơi chậm vì các cách nối cụ thể về văn hóa, v.v.), trong khi nối chuỗi - 1 kết quả + 1 tạm thời, phải không?
String.Concatenate
, nó trực tiếp xây dựng chỉ một chuỗi đầu ra (IIRC, nếu các chuỗi là bằng chữ thì việc ghép được thực hiện trong trình biên dịch.
"a"+b+"c"+d
, v.v.) bằng hiệu suất có bằng một đơn không? Hoặc chỉ cần chuyển đổi String.Concatenate(a,b,c,d,etc)
, phải không?
string.Format
trong bình luận. Việc nối chuỗi sẽ không tạo ra bất kỳ chuỗi tạm thời nào, bởi vì trình biên dịch sẽ gọi string.Concat(first, Environment.NewLine, second)
.
Thêm một cách sắp xếp thuận tiện của Môi trường.NewLine trong chuỗi định dạng. Ý tưởng là tạo phương thức mở rộng chuỗi định dạng chuỗi như bình thường nhưng cũng thay thế {nl} trong văn bản bằng Môi trường.NewLine
Sử dụng
" X={0} {nl} Y={1}{nl} X+Y={2}".FormatIt(1, 2, 1+2);
gives:
X=1
Y=2
X+Y=3
Mã
///<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);
}
Ghi chú
Nếu bạn muốn ReSharper làm nổi bật các tham số của mình, hãy thêm thuộc tính vào phương thức trên
[StringFormatMethod ("định dạng")]
Việc triển khai này rõ ràng là kém hiệu quả hơn so với String.Format
Có lẽ một người, người quan tâm đến câu hỏi này cũng sẽ quan tâm đến câu hỏi tiếp theo: Định dạng chuỗi được đặt tên trong C #
string myText =
@"<div class=""firstLine""></div>
<div class=""secondLine""></div>
<div class=""thirdLine""></div>";
không phải vậy đâu
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
- xem các câu trả lời khác.
const string
các phiên bản .net mới hơn cho phép bạn sử dụng $ phía trước nghĩa đen cho phép bạn sử dụng các biến bên trong như sau:
var x = $"Line 1{Environment.NewLine}Line 2{Environment.NewLine}Line 3";
Nếu bạn thực sự muốn chuỗi Dòng mới là một hằng số, thì bạn có thể làm điều này:
public readonly string myVar = Environment.NewLine;
Người dùng của từ khóa chỉ đọc trong C # có nghĩa là biến này chỉ có thể được gán cho một lần. Bạn có thể tìm thấy các tài liệu về nó ở đây . Nó cho phép khai báo một biến không đổi có giá trị không được biết cho đến thời gian thực hiện.
Nếu bạn đang làm việc với ứng dụng Web, bạn có thể thử điều này.
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 />")
Nếu tôi hiểu câu hỏi: Cặp đôi "\r\n"
để có được dòng mới dưới đây trong một textbox
. Ví dụ của tôi đã làm việc -
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;
Một câu trả lời điển hình có thể là s1
s2
trong kiểu text box
sử dụng được xác định.