Как использовать тернарный оператор внутри интерполированной строки?


408

Я не понимаю, почему этот код не скомпилируется:

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

Если я разделю это, это работает отлично:

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

9
@Sinatr Обновленная ссылка: thebillwagner.com/Blog/Item/…
Нейт Барбеттини,


Ответы:


722

Согласно документации :

Структура интерполированной строки выглядит следующим образом:

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

Проблема в том, что двоеточие используется для обозначения форматирования, например:

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

Решение состоит в том, чтобы обернуть условное в круглые скобки:

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

2
Еще более интересный пример это один , когда вам нужно использовать вложенную интерполяции строки: Console.WriteLine($"Cargo Weight: {(ship.WeightAvailable ? $"{ship.Weight:0.00}" : "n/a")}");
Jan
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.