Come usare l'operatore ternario all'interno di una stringa interpolata?


408

Sono confuso sul perché questo codice non verrà compilato:

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

Se lo divido, funziona bene:

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


Lo stesso vale per il qualificatore dell'alias dello spazio dei nomi (: :) .
Uwe Keim,

Risposte:


722

Secondo la documentazione :

La struttura di una stringa interpolata è la seguente:

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

Il problema è che i due punti vengono utilizzati per indicare la formattazione, come:

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

La soluzione è racchiudere il condizionale tra parentesi:

var result = $"Descending {(isDescending ? "yes" : "no")}";

2
Ancora più interessante esempio è questo uno quando è necessario utilizzare una stringa di interpolazione nidificato: Console.WriteLine($"Cargo Weight: {(ship.WeightAvailable ? $"{ship.Weight:0.00}" : "n/a")}");
Jan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.