2009-04-12 25 views

Trả lời

21

Strings literals

C# hỗ trợ hai hình thức xâu: chuỗi literals thường xuyênchuỗi literals đúng nguyên văn.

A chuỗi chữ thường bao gồm 0 hoặc nhiều ký tự kèm theo dấu ngoặc kép, như trong "hello" và có thể bao gồm cả chuỗi thoát đơn giản (chẳng hạn như \ t cho ký tự tab) và chuỗi thập lục phân và Unicode .

A chuỗi nguyên văn bao gồm ký tự @ theo sau là ký tự ngoặc kép, số không hoặc nhiều ký tự và ký tự ngoặc kép đóng. Một ví dụ đơn giản là @ "hello". Trong một chuỗi chữ đúng nguyên văn, các ký tự giữa các dấu phân tách được diễn giải đúng nguyên văn, ngoại lệ duy nhất là một chuỗi thoát-trích dẫn. Đặc biệt, các trình tự thoát đơn giản và các chuỗi thoát Unicode và thập lục phân không được xử lý bằng các chuỗi ký tự nguyên văn. Một chuỗi chữ nguyên văn có thể kéo dài nhiều dòng.

Ví dụ 1:

@"C:\Path\File.zip" == "C:\\Path\\File.zip" 

// where 

"C:\\Path\\File.zip" // regular string literal 
@"C:\Path\File.zip" // verbatim string literal 

Note: Trong literals chuỗi đúng nguyên văn bạn nên thoát khỏi dấu ngoặc kép.

Ví dụ 2:

@"He said: ""Hello""" == "He said: \"Hello\"" 

Thông tin thêm ở đây:

định danh

Tiền tố "@" cho phép việc sử dụng các từ khóa như nhận dạng, đó là hữu ích khi giao tiếp với ngôn ngữ lập trình khác. Ký tự @ không thực sự là một phần của số nhận dạng, do đó, số nhận dạng có thể được nhìn thấy bằng các ngôn ngữ khác dưới dạng số nhận dạng thông thường, không có tiền tố. Mã định danh có tiền tố @ được gọi là số nhận dạng nguyên văn. Việc sử dụng tiền tố @ cho số nhận dạng không phải là từ khóa được phép, nhưng không được khuyến khích mạnh mẽ như một vấn đề về phong cách.

Ví dụ:

class @class 
{ 
    public static void @static(bool @bool) { 
     if (@bool) 
     System.Console.WriteLine("true"); 
     else 
     System.Console.WriteLine("false"); 
    } 
} 
class Class1 
{ 
    static void M() { 
     cl\u0061ss.st\u0061tic(true); 
    } 
} 
+0

Không nhất, tất cả ngoại trừ báo giá kép. – Samuel

+0

Nó cũng cho phép chuỗi nhiều dòng. –

+0

Bạn đã bỏ lỡ @ đang được sử dụng trên số nhận dạng - nó không được đề cập một cách rõ ràng trong câu hỏi, nhưng tôi muốn nói rằng chủ đề bao gồm nó. –

2

Biểu tượng @ cơ bản "tham chuỗi này chính xác như nó là". Nó cho phép nhà phát triển tránh thoát.

Vì vậy, @ "C: \" == "C: \\" (với \ thoát).

Tôi thấy nó hữu ích nhất trong RegEx ... RegEx có thể thực sự khó chịu và khó hiểu nhanh khi bạn bắt đầu thoát những thứ khác nhau, v.v., vì vậy thật tuyệt khi chỉ sử dụng giá trị bằng chữ.

1

ký hiệu @ trước một chuỗi cho phép diễn giải theo nghĩa đen của chuỗi, nếu không bạn sẽ phải thoát dấu gạch chéo ngược với chuỗi khác ("C: \").

2

Đó là verbatim string literal để bạn có thể sử dụng dấu gạch chéo ngược mà không được hiểu là ký tự thoát.

Một chuỗi đúng nguyên văn theo nghĩa đen gồm một nhân vật @ theo sau là một nhân vật đúp báo giá, bằng không hoặc nhiều ký tự và đóng đúp quote nhân vật. Một ví dụ đơn giản là @"hello". Trong một chuỗi nguyên văn theo nghĩa đen, các ký tự giữa các ký tự phân cách được diễn giải nguyên văn, ngoại lệ duy nhất là báo giá thoát-chuỗi. Cụ thể, trình tự thoát đơn giản và thoát hệ thập lục phân và Unicode trình tự không được xử lý trong các chuỗi ký tự nguyên văn. Nguyên văn chuỗi chữ có thể trải rộng trên nhiều dòng .

quote-escape-chuỗi: ""

Vì vậy, chỉ thoát khỏi chuỗi đúng nguyên văn theo nghĩa đen không được thoát "" như " trong vòng hai "s

1

@ chỉ ra rằng chuỗi là một chuỗi chữ. và bạn không cần phải thoát khỏi các nhân vật bên trong nó. Khi số documentation for string đặt nó:

Lợi thế của các chuỗi nguyên âm là e chuỗi scape không được xử lý, điều này giúp bạn dễ dàng viết, ví dụ: tên tệp hoàn chỉnh đủ điều kiện: @ "c: \ Documents \ Source \ a.txt" thay vì "c:\\Docs\\Source\\a.txt"

1

Đặt @ trước chuỗi biến nó từ một chuỗi chữ thường thành một chuỗi chữ đúng nguyên văn mà không sử dụng dấu gạch chéo chuyển tiếp để thoát() nhưng sử dụng hai dấu ngoặc kép liên tiếp để thoát khỏi một câu trích dẫn.

Jon Skeet writes more about strings in C#/.NET.

7

Biểu tượng @ có một vài ý nghĩa trong C#:

  • Khi được sử dụng vào đầu của chuỗi, nó có nghĩa là "lấy chuỗi này theo nghĩa đen, không giải thích nhân vật mà nếu không sẽ được sử dụng như các ký tự thoát. " Đây được gọi là verbatim string literal. Ví dụ: @"\n\t" bằng "\\n\\t".

  • Khi được sử dụng ở đầu số nhận dạng, có nghĩa là "diễn giải điều này dưới dạng từ định danh, không phải là từ khóa". Ví dụ: int @this sẽ cho phép bạn đặt tên biến số nguyên "this", thường sẽ là bất hợp pháp vì this là từ khóa.

Các vấn đề liên quan