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

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.