2015-08-05 41 views
238

Jestem zdezorientowany, dlaczego ten kod nie zostanie skompilowany:Jak korzystać z operatora trójskładnikowego wewnątrz interpolowanego ciągu?

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

Gdybym podzielić go, to działa dobrze:

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

[_Here jest dobry post przez Billa Wagnera, który wyjaśnia problemu w detail_] (http://thebillwagner.com/Blog/Item/StringInterpolationandtheConditionalOperators%5E1661). –

+0

@Petrichor, * Wystąpił błąd podczas przetwarzania Twojego żądania *. – Sinatr

+7

@Sinatr Zaktualizowany link: http://thebillwagner.com/Blog/Item/2015-07-05-StringInterpolationandTainternationalOperators –

Odpowiedz

404

Według documentation:

Struktura interpolowanego łańcucha jest następująca:

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

Problemem jest to, że jelita grubego jest używany do oznaczenia formatowanie, jak

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

Tak, tl; dr odpowiedź brzmi: owinąć warunkowego w nawiasach.

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

Jak na ironię, w końcu podzieliłem linię, aby ułatwić jej czytanie. Ale myślałem, że ktoś może być w pewnym momencie zdezorientowany przez to (ja, być może). –

+41

Jeszcze bardziej ironicznie, gdy zapomnisz użyć nawiasów, Visual Studio podkreśli dwukropek i wyświetli komunikat "Oczekiwany dwukropek". :) – Spook

+3

Pytanie jest jeszcze lepsze, ponieważ nie tylko odpowiadasz na jednoznaczne pytanie, ale odpowiadasz na następujące ukryte pytanie: jakie jest obejście tego problemu. –