Bagaimana cara menggunakan operator ternary di dalam string yang diinterpolasi?

408

Saya bingung mengapa kode ini tidak dapat dikompilasi:

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

Jika saya membaginya, itu berfungsi dengan baik:

var desc = isDescending ? " desc" : string.Empty;
var result = $"{fieldName}{desc}";
Nate Barbettini
sumber
9
@Sinatr Tautan yang Diperbarui: thebillwagner.com/Blog/Item/…
Nate Barbettini
Hal yang sama berlaku untuk kualifikasi namespace alias (: :) .
Uwe Keim

Jawaban:

722

Menurut dokumentasi :

Struktur string yang diinterpolasi adalah sebagai berikut:

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

Masalahnya adalah bahwa titik dua digunakan untuk menunjukkan format, seperti:

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

Solusinya adalah dengan membungkus kondisi dalam tanda kurung:

var result = $"Descending {(isDescending ? "yes" : "no")}";
Nate Barbettini
sumber
2
Yang lebih menarik contoh adalah yang satu ini ketika Anda perlu menggunakan bersarang interpolasi tali: Console.WriteLine($"Cargo Weight: {(ship.WeightAvailable ? $"{ship.Weight:0.00}" : "n/a")}");
Jan