Wie verwende ich den ternären Operator in einer interpolierten Zeichenfolge?

408

Ich bin verwirrt, warum dieser Code nicht kompiliert werden kann:

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

Wenn ich es aufteile, funktioniert es gut:

var desc = isDescending ? " desc" : string.Empty;
var result = $"{fieldName}{desc}";
Nate Barbettini
quelle
9
@ Sinatr Aktualisierter Link: thebillwagner.com/Blog/Item/…
Nate Barbettini
Gleiches gilt für das Namespace-Alias-Qualifikationsmerkmal (: :) .
Uwe Keim
Diskussion im Zusammenhang mit dem Roslyn-Team: Seltsamer Syntaxfehler in interpolierten Zeichenfolgen bei Verwendung von ?:
Minuten

Antworten:

722

Laut Dokumentation :

Die Struktur einer interpolierten Zeichenfolge ist wie folgt:

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

Das Problem ist, dass der Doppelpunkt verwendet wird, um die Formatierung zu kennzeichnen, wie zum Beispiel:

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

Die Lösung ist zu wickeln die bedingte in Klammern:

var result = $"Descending {(isDescending ? "yes" : "no")}";
Nate Barbettini
quelle
2
Noch interessanter Beispiel ist dies ein , wenn Sie eine verschachtelte Interpolation Zeichenfolge verwenden müssen: Console.WriteLine($"Cargo Weight: {(ship.WeightAvailable ? $"{ship.Weight:0.00}" : "n/a")}");
Jan