Comment utiliser l'opérateur ternaire à l'intérieur d'une chaîne interpolée?

408

Je ne comprends pas pourquoi ce code ne compilera pas:

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

Si je le sépare, cela fonctionne très bien:

var desc = isDescending ? " desc" : string.Empty;
var result = $"{fieldName}{desc}";
Nate Barbettini
la source
9
@Sinatr Lien mis à jour: thebillwagner.com/Blog/Item/…
Nate Barbettini
La même chose s'applique au qualificatif d'alias d'espace de noms (: :) .
Uwe Keim

Réponses:

722

Selon la documentation :

La structure d'une chaîne interpolée est la suivante:

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

Le problème est que les deux points sont utilisés pour désigner la mise en forme, comme:

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

La solution consiste à encapsuler le conditionnel entre parenthèses:

var result = $"Descending {(isDescending ? "yes" : "no")}";
Nate Barbettini
la source
2
Même exemple plus intéressant est celui - ci lorsque vous avez besoin d'utiliser une chaîne d'interpolation imbriquée: Console.WriteLine($"Cargo Weight: {(ship.WeightAvailable ? $"{ship.Weight:0.00}" : "n/a")}");
Jan