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

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

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

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

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

Ответ 1

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

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

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

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

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

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

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