Jak korzystać z operatora trójskładnikowego w interpolowanym ciągu?

408

Nie wiem, dlaczego ten kod się nie skompiluje:

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

Jeśli podzielę to, działa dobrze:

var desc = isDescending ? " desc" : string.Empty;
var result = $"{fieldName}{desc}";
Nate Barbettini
źródło
9
@Sinatr Zaktualizowano link: thebillwagner.com/Blog/Item/…
Nate Barbettini
To samo dotyczy kwalifikatora aliasu przestrzeni nazw (: :) .
Uwe Keim,
Dyskusja związana z zespołem Roslyn: Dziwny błąd składniowy w interpolowanym ciągu przy użyciu?:
min

Odpowiedzi:

722

Zgodnie z dokumentacją :

Struktura interpolowanego ciągu jest następująca:

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

Problem polega na tym, że dwukropek służy do oznaczania formatowania, na przykład:

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

Rozwiązaniem jest zawarcie warunku w nawiasie:

var result = $"Descending {(isDescending ? "yes" : "no")}";
Nate Barbettini
źródło
2
Jeszcze bardziej interesujące jest to jeden z przykładów, kiedy trzeba użyć interpolacji zagnieżdżony ciąg: Console.WriteLine($"Cargo Weight: {(ship.WeightAvailable ? $"{ship.Weight:0.00}" : "n/a")}");
Jan