Tôi bắt đầu học C# và tôi không hiểu tại sao các chuỗi ký tự thông thường (tức là, " "
) không được chứa các ký tự dòng mới. (Tôi không nói về chuỗi thoát \n
). Tôi biết rằng bạn phải sử dụng các chuỗi chữ đúng nguyên văn (tức là, @" "
) cho các chuỗi nhiều dòng, nhưng tại sao?Tại sao các chuỗi không đúng nguyên văn có chứa dòng mới?
Tôi đã không nhìn thấy nó quy định rõ ràng rằng bạn không thể sử dụng chúng trong chuỗi thông thường. Hơn thế nữa, ngoại trừ việc nó được đề cập đến khi tôi có thể sử dụng chuỗi nguyên văn cho điều này, mọi thứ tôi đã đọc dường như gợi ý rằng các ký tự dòng mới sẽ được cho phép trong các chuỗi ký tự thông thường.
Beginning Visual C# 2010 và Code: Generating Multiline String Literals (Visual C#) hiển thị ví dụ về chuỗi nhiều dòng nguyên bản mà không giải thích thêm.
Learning C# 3.0 nói điều này:
Trong ngôn ngữ C#, không gian, các tab, và dòng mới được coi là khoảng trắng .... tắm trắng thường bị bỏ qua trong C# báo cáo. ... Ngoại lệ đối với quy tắc này là khoảng trống trong chuỗi được coi là chữ; nó không bị bỏ qua.
Vì vậy, nó là chữ? Đó là điều tôi mong đợi, nhưng không phải vậy.
Nó thậm chí bao gồm hộp này tip:
Mẹo
lập trình Visual Basic lưu ý: trong C#, dòng end-of-không có ý nghĩa đặc biệt. Các câu lệnh được kết thúc bằng dấu chấm phẩy, chứ không phải ký tự mới. Không có ký tự tiếp tục dòng vì không cần ký tự.
(Tôi nhận ra rằng đây là nói về bên ngoài của dây, nhưng tại sao sẽ kết thúc-of-line có đặc biệt phân tích ý nghĩa bên một chuỗi nếu nó không ngoài một chuỗi?)
Có cuối cùng đã tìm được đường đến chính bản thân số string (C# Reference), tôi vẫn không thu được thông tin chi tiết nào:
Chuỗi ký tự có thể chứa bất kỳ ký tự nào. Trình tự thoát được bao gồm. Ví dụ sau sử dụng trình tự thoát
\\
cho dấu gạch chéo ngược,\u0066
cho chữ cái f và\n
cho dòng mới.
Nó nói rằng chuỗi thoát thể được sử dụng, nhưng nó không nói rằng họ phải được sử dụng. Các ký tự dòng chữ mới không có trong "bất kỳ ký tự chữ" nào không? Nếu tôi có một chuỗi chứa ký tự tab theo nghĩa đen thay vì chuỗi thoát của nó \t
thì không có lỗi. Nhưng nếu tôi có một dòng mới, tôi sẽ gặp lỗi. Tôi thậm chí đã thay đổi kết thúc dòng của tệp từ \r\n
thành \n
hoặc \r
không có hiệu lực.
Rõ ràng, tôi có thể suy ra từ các ví dụ và từ lỗi Visual Studio rằng một chuỗi nguyên văn là cần thiết nếu nó chứa một ký tự xuống dòng theo nghĩa đen, nhưng tất cả những gì tôi đã đọc cho thấy rằng không phải là trường hợp . Tại sao sự khác biệt?
Tôi nghĩ rằng đây có lẽ là một trong những thứ "vì đó là cách ngôn ngữ hoạt động" .. Nó có lẽ được lấy cảm hứng từ các ngôn ngữ khác mà các lập trình viên C# mới sẽ đến. Như bạn đã đề cập, bạn có thể sử dụng tiền tố @ để xác định hằng số chuỗi nguyên văn. –
@MikeChristensen Oh yeah, và tôi đã cố gắng thoát khỏi dòng mới bằng chữ với dấu gạch chéo ngược như tôi đã thấy trong C/C++. Không may mắn ở đó. – Wiseguy