วิธีการใช้ผู้ประกอบการที่ประกอบไปด้วยภายในสายแทรก?


408

ฉันสับสนว่าทำไมรหัสนี้จะไม่รวบรวม:

var result = $"{fieldName}{isDescending ? " desc" : string.Empty}";

ถ้าฉันแยกมันก็ใช้งานได้ดี:

var desc = isDescending ? " desc" : string.Empty;
var result = $"{fieldName}{desc}";

9
@Sinatr อัปเดตลิงก์: thebillwagner.com/Blog/Item/…
Nate Barbettini

เช่นเดียวกับที่ใช้กับรอบคัดเลือก namespace นามแฝง (: :)
Uwe Keim

คำตอบ:


722

ตามเอกสาร :

โครงสร้างของสตริง interpolated เป็นดังนี้:

{ <interpolationExpression>[,<alignment>][:<formatString>] }

ปัญหาคือว่าใช้เครื่องหมายโคลอนเพื่อแสดงการจัดรูปแบบเช่น:

Console.WriteLine($"The current hour is {hours:hh}")

วิธีแก้คือห่อเงื่อนไขในวงเล็บ:

var result = $"Descending {(isDescending ? "yes" : "no")}";

2
ตัวอย่างที่น่าสนใจยิ่งกว่านี้ก็คือกรณีนี้เมื่อคุณจำเป็นต้องใช้สตริงการแก้ไขที่ซ้อนกัน: Console.WriteLine($"Cargo Weight: {(ship.WeightAvailable ? $"{ship.Weight:0.00}" : "n/a")}");
ม.ค.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.