¿Cómo usar el operador ternario dentro de una cadena interpolada?


408

Estoy confundido sobre por qué este código no se compilará:

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

Si lo divido, funciona bien:

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

99
@Sinatr Enlace actualizado: thebillwagner.com/Blog/Item/…
Nate Barbettini


Discusión relacionada con el equipo de Roslyn: extraño error de sintaxis en una cadena interpolada cuando se usa?:
minutos

Respuestas:


722

De acuerdo con la documentación :

La estructura de una cadena interpolada es la siguiente:

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

El problema es que los dos puntos se usan para denotar el formato, como:

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

La solución es envolver el condicional entre paréntesis:

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

2
Aún más interesante ejemplo es éste cuando se necesita usar una cadena de interpolación anidada: Console.WriteLine($"Cargo Weight: {(ship.WeightAvailable ? $"{ship.Weight:0.00}" : "n/a")}");
Ene
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.