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

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