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


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

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

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

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

Answers


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

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

$ "{ <interpolation-expression> <optional-comma-field-width> <optional-colon-format> }"

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

Console.WriteLine($"Time in hours is {hours:hh}")

Итак, ответ tl; dr : завершите условное выражение в скобках.

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