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}";

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")}";

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.