การใช้ตัวแปรภายในสตริง


91

ใน PHP ฉันสามารถทำสิ่งต่อไปนี้:

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

มีโครงสร้างภาษาที่คล้ายกันใน C # หรือไม่?

ฉันรู้ว่ามีString.Format();แต่ฉันต้องการทราบว่าสามารถทำได้โดยไม่ต้องเรียกใช้ฟังก์ชัน / วิธีการบนสตริงหรือไม่

คำตอบ:


225

ใน C # 6 คุณสามารถใช้การแก้ไขสตริง :

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

การเน้นไวยากรณ์สำหรับสิ่งนี้ใน Visual Studio ทำให้สามารถอ่านได้สูงและมีการตรวจสอบโทเค็นทั้งหมด


88

ฟังก์ชันนี้ไม่ได้อยู่ใน C # 5 หรือต่ำกว่า
อัปเดต: C # 6 รองรับการแก้ไขสตริงแล้วดูคำตอบที่ใหม่กว่า

วิธีที่แนะนำในการทำเช่นนี้คือString.Format:

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

อย่างไรก็ตามฉันเขียนไลบรารีโอเพ่นซอร์สขนาดเล็กที่เรียกว่าSmartFormatซึ่งขยายออกไปString.Formatเพื่อให้สามารถใช้ตัวยึดตำแหน่งที่มีชื่อ (ผ่านการสะท้อน) คุณสามารถทำได้:

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

หวังว่าคุณจะชอบมัน!


2
มีโทษด้านประสิทธิภาพแบบใดสำหรับการใช้การสะท้อนกลับของคุณเทียบกับสตริงมาตรฐานรูปแบบ?
styfle

ฉันเห็นว่าคุณมีหน้าประสิทธิภาพในวิกิแล้ว มันดูมีอนาคตมากทีเดียว ทำได้ดีมาก!
styfle

ใช่ฉันเชื่อว่าหน้าประสิทธิภาพอาจตอบคำถามของคุณได้ แต่ฉันไม่ได้ทำการเปรียบเทียบใด ๆ ระหว่าง "สวัสดี {0}" กับ "สวัสดี {name}" เห็นได้ชัดว่าการสะท้อนจะใช้เวลานานขึ้น อย่างไรก็ตามการใช้คุณลักษณะการแคชจะช่วยเพิ่มประสิทธิภาพในการแยกวิเคราะห์และสามารถลดความแตกต่างได้ ไม่ว่าจะด้วยวิธีใดสิ่งต่าง ๆ ก็รวดเร็ว!
Scott Rippey

1
นี่ไม่เป็นความจริงอีกต่อไป C # 6 เพิ่มสิ่งนี้เป็นคุณสมบัติ
โคลจอห์นสัน

6

ใช้วิธีการดังต่อไปนี้

1: วิธีที่หนึ่ง

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

2: วิธีที่สอง

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

3: วิธีที่สาม

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

4: วิธีที่สี่

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

5: วิธีที่ห้า

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

1
จะเป็นการดีที่จะเพิ่มความคิดเห็นว่าทำไมคุณถึงเลือกใช้แต่ละวิธีเหล่านี้
ZombieCode

5

ถึง C # 5 (-VS2013) คุณต้องเรียกใช้ฟังก์ชัน / วิธีการสำหรับมัน ฟังก์ชัน "ปกติ" เช่นString.Formatหรือตัวดำเนินการ + ที่มากเกินไป

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

ในการแก้ไขสตริง C # 6 (VS2015) ได้รับการแนะนำ (ตามที่อธิบายโดยคำตอบอื่น ๆ )

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.