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

9
@ Sinatr Aktualisierter Link: thebillwagner.com/Blog/Item/…
Nate Barbettini


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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.