Sử dụng các biến bên trong chuỗi


89

Trong PHP, tôi có thể làm như sau:

$name = 'John';
$var = "Hello {$name}";    // => Hello John

Có cấu trúc ngôn ngữ tương tự trong C # không?

Tôi biết là có String.Format();nhưng tôi muốn biết liệu nó có thể được thực hiện mà không cần gọi hàm / phương thức trên chuỗi hay không.

Câu trả lời:


223

Trong C # 6, bạn có thể sử dụng nội suy chuỗi :

string name = "John";
string result = $"Hello {name}";

Đánh dấu cú pháp cho điều này trong Visual Studio làm cho nó dễ đọc và tất cả các mã được kiểm tra.


88

Chức năng này không được tích hợp sẵn cho C # 5 trở xuống.
Cập nhật: C # 6 hiện hỗ trợ nội suy chuỗi, hãy xem các câu trả lời mới hơn.

Cách được đề xuất để làm điều này sẽ là String.Format:

string name = "Scott";
string output = String.Format("Hello {0}", name);

Tuy nhiên, tôi đã viết một thư viện mã nguồn mở nhỏ có tên SmartFormat mở rộng String.Formatđể nó có thể sử dụng các trình giữ chỗ đã đặt tên (thông qua phản chiếu). Vì vậy, bạn có thể làm:

string name = "Scott";
string output = Smart.Format("Hello {name}", new{name}); // Results in "Hello Scott".

Hy vọng bạn thích nó!


2
Có loại hình phạt hiệu suất nào đối với việc sử dụng triển khai phản chiếu của bạn so với chuỗi tiêu chuẩn.
styfle

Tôi thấy bạn đã có một trang biểu diễn trên wiki. Nó trông khá hứa hẹn. Công việc tốt đẹp!
styfle

Có, tôi tin rằng trang hiệu suất có thể giải quyết câu hỏi của bạn, nhưng tôi chưa chạy bất kỳ so sánh nào giữa "Xin chào {0}" và "Xin chào {name}". Rõ ràng là thời gian phản chiếu sẽ lâu hơn. Tuy nhiên, việc sử dụng tính năng bộ nhớ đệm sẽ cải thiện hiệu suất phân tích cú pháp và có thể giảm thiểu sự khác biệt. Dù bằng cách nào, mọi thứ đều NHANH CHÓNG!
Scott Rippey

1
Điều này không còn đúng nữa. C # 6 đã thêm điều này như một tính năng
Cole Johnson

5

Lên đến C # 5 (-VS2013), bạn phải gọi một hàm / phương thức cho nó. Một hàm "bình thường" chẳng hạn như String.Formathoặc quá tải toán tử +.

string str = "Hello " + name; // This calls an overload of operator +.

Trong C # 6 (VS2015) nội suy chuỗi đã được giới thiệu (như được mô tả trong các câu trả lời khác).


5

Sử dụng các phương pháp sau

1: Phương pháp một

var count = 123;
var message = $"Rows count is: {count}";

2: Phương pháp hai

var count = 123;
var message = "Rows count is:" + count;

3: Phương pháp ba

var count = 123;
var message = string.Format("Rows count is:{0}", count);

4: Phương pháp bốn

var count = 123;
var message = @"Rows
                count
                is:{0}" + count;

5: Phương pháp năm

var count = 123;
var message = $@"Rows 
                 count 
                 is: {count}";

1
Sẽ rất vui nếu bạn thêm một bình luận về lý do tại sao bạn chọn sử dụng từng phương pháp này.
ZombieCode
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.