2010-01-02 48 views
25

Giả sử bạn có một chuỗi dài (> 80 ký tự) mà bạn muốn trải rộng trên nhiều dòng nguồn, nhưng không muốn bao gồm bất kỳ ký tự dòng mới nào.Trong C#, cách tốt nhất để truyền một chuỗi ký tự một dòng trên nhiều dòng nguồn là gì?

Một lựa chọn là để nối chuỗi con:

string longString = "Lorem ipsum dolor sit amet, consectetur adipisicing" + 
    " elit, sed do eiusmod tempor incididunt ut labore et dolore magna" + 
    " aliqua. Ut enim ad minim veniam"; 

Có cách nào tốt hơn, hoặc đây là lựa chọn tốt nhất?

Chỉnh sửa: Bởi "tốt nhất", ý tôi là dễ nhất để người lập trình đọc, viết và chỉnh sửa. Ví dụ, nếu bạn đã muốn dòng mới, nó rất dễ dàng để xem xét:

string longString = 
@"Lorem ipsum dolor sit amet, consectetur adipisicing 
elit, sed do eiusmod tempor incididunt ut labore et dolore magna 
aliqua. Ut enim ad minim veniam"; 

Tôi tự hỏi nếu có cái gì đó giống như sạch khi bạn không muốn dòng mới.

Trả lời

46

Tôi sẽ sử dụng một biến thể của phương pháp của bạn:

string longString = 
    "Lorem ipsum dolor sit amet, consectetur adipisicing " + 
    "elit, sed do eiusmod tempor incididunt ut labore et dolore magna " + 
    "aliqua. Ut enim ad minim veniam."; 

Ở đây tôi bắt đầu chuỗi trên dòng sau dấu bằng để họ có tất cả các dòng lên, và tôi cũng chắc chắn rằng không gian xảy ra tại kết thúc của dòng (một lần nữa, cho các mục đích liên kết).

+0

Tôi thích cách tiếp cận này tốt nhất. –

+20

Thật tuyệt khi trình biên dịch C# kết hợp các chuỗi ký tự như vậy vào thời gian biên dịch, vì vậy không có chi phí thời gian chạy liên quan đến điều này. – LBushkin

+0

Không có cách nào khó chịu !!! –

-2

Bạn có thể sử dụng nhiều consts và sau đó kết hợp chúng thành một chuỗi lớn:

const string part1 = "part 1"; 
const string part2 = "part 2"; 
const string part3 = "part 3"; 
string bigString = part1 + part2 + part3; 

Trình biên dịch sẽ "gấp" những hằng số thành một chuỗi lớn dù sao, vì vậy không có chi phí thời gian chạy ở tất cả để kỹ thuật này so với mẫu mã ban đầu của bạn.

Có một số lợi thế cho phương pháp này:

  1. Các chuỗi con có thể dễ dàng tái sử dụng trong các bộ phận khác của ứng dụng.
  2. Chất nền có thể được xác định trong nhiều tệp hoặc loại, nếu muốn.
+0

Tôi đã chỉnh sửa câu hỏi của mình để làm rõ ý tôi là "tốt nhất". –

10

Ý tưởng ban đầu của bạn có lẽ là cách dễ nhất để có chuỗi ký tự được nhúng trong mã của bạn.C# compiler merges literals concatenated with + - do đó về cơ bản nó tương đương với một chuỗi dài thực sự.

Một tùy chọn khác, tất nhiên, là để bên ngoài chuỗi thành tệp cấu hình hoặc tệp cài đặt. Điều này sẽ cho phép cả hai dễ đọc hơn và dễ dàng hơn để thay đổi hoặc bản địa hóa. Cá nhân tôi tránh đặt các dòng văn bản dài trực tiếp vào mã của ứng dụng trừ khi chúng rất tĩnh và không cần bản địa hóa - văn bản thông báo ngoại lệ nội bộ và các nội dung tương tự.

24

Nếu bạn muốn giữ mã tối thiểu như bạn có thể và có thể đọc nó một cách dễ dàng tôi vẫn sẽ đi với một chuỗi @ chữ. Cộng với nó nhanh hơn nếu bạn nguồn dài và ..

string verbatimLit = @" 
    __ __ 
/`-' \ 
/_| N |_\ Sometimes 
    | I | format in code 
    | N | matters 
    |_____| 
"; 

Sau đó loại bỏ các dòng mới từ chuỗi trong 1 dòng,

verbatimLit.Replace(Environment.NewLine, " "); 
+2

Cách tiếp cận tốt đẹp. Mặc dù bạn không muốn thay thế mỗi dòng mới bằng một không gian? Nếu không, 'nội dung tại đây' sẽ trở thành' nội dung' thay vì 'nội dung ở đây'. (Hoặc, người ta có thể thêm trước mỗi dòng theo sau dòng đầu tiên với một dấu cách.) – DavidRR

6

Đối với các truy vấn SQL hoặc các chuỗi dài khác có cú pháp riêng của họ, đôi khi tôi sẽ làm một cái gì đó như thế này:

 private const string QUERY = @" 
SELECT * 
FROM Table1 AS T1 
INNER JOIN Table2 AS T2 ON T1.ID = T2.T1ID 
WHERE T1.VALUE = @P1 
GROUP BY T2.OTHERVALUE 
"; 

Điều này để nguyên định dạng của chuỗi.

0

Khi tìm kiếm chính mình trong câu hỏi về cách thực hiện chuỗi nhiều dòng, bạn có thể sử dụng tệp Tài nguyên tốt hơn.

+3

Hãy hiển thị ví dụ về việc sử dụng các chuỗi như vậy trong tệp tài nguyên. –

0

Theo dõi Tj Kellie câu trả lời, trong C# 6.0 bạn có thể dễ dàng có một lệnh để thực hiện nối và nhúng thông tin khác nhau thông qua nội suy chuỗi và cũng không có dòng mới mặc dù xác định chuỗi trên nhiều dòng.

Một ví dụ phức tạp liên quan đến tất cả những có thể trông giống như sau:

public int? BestTime { get; set; } 
public int? WorstTime { get; set; } 
public int? AvgTime { get; set; } 
public int TimeoutReachedCount { get; set; } 
public int AllRunCount { get; set; } 

public string Str => [email protected]" 
    Ran {AllRunCount} times; 
    Reached timeout {TimeoutReachedCount} times; 
    Best time = {(BestTime.HasValue ? BestTime.ToString() : "N/A")}; 
    Worst time = {(WorstTime.HasValue ? WorstTime.ToString() : "N/A")}; 
    Average time = {(AvgTime.HasValue ? AvgTime.ToString() :"N/A")};" 
     .Replace(Environment.NewLine, ""); 

Tất nhiên, cẩn thận phải được sử dụng để nối thêm khoảng trống ở cuối dòng để tránh từ việc sáp nhập.

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