Como usar o operador ternário dentro de uma string interpolada?


408

Estou confuso sobre o motivo pelo qual esse código não será compilado:

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

Se eu dividir, funciona bem:

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



Respostas:


722

De acordo com a documentação :

A estrutura de uma cadeia de caracteres interpolada é a seguinte:

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

O problema é que os dois pontos são usados ​​para denotar formatação, como:

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

A solução é agrupar o condicional entre parênteses:

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

2
Ainda mais interessante exemplo é um presente quando você precisa usar uma seqüência de interpolação aninhada: Console.WriteLine($"Cargo Weight: {(ship.WeightAvailable ? $"{ship.Weight:0.00}" : "n/a")}");
Jan
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.