2015-08-05 20 views
238

Bu kod derlemek olmaz neden olarak karıştı:Üçlü işleç enterpolasyonlu bir dizede nasıl kullanılır?

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

bunu bölmek, bu iyi çalışır:

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

[_Here detail_ sorunu açıklıyor Bill Wagner tarafından iyi bir yazıdır] (http://thebillwagner.com/Blog/Item/StringInterpolationandtheConditionalOperators%5E1661). –

+0

@Petrichor, * İsteğiniz işlenirken bir hata oluştu *. – Sinatr

+7

@Sinatr Güncelleştirilen bağlantı: http://thebillwagner.com/Blog/Item/2015-07-05-StringInterpolationveConditionalOperators –

cevap

404

documentation göre:

Bir araya getirilmiş dizenin yapısı aşağıdaki gibidir:

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

sorun, kolon Yani

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

gibi biçimlendirme belirtmek için kullanılır olmasıdır tl; dr cevabı edilir: Parantez içindeki koşullu sarın.

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

İronik olarak, daha kolay okunabilmesi için çizgiyi ayırmaktan vazgeçtim. Ancak, birisinin muhtemelen bir şeye karışmış olabileceğini düşündüm (kendim, muhtemelen). –

+41

Daha da ironik olarak, parantez kullanmayı unuttuğunuzda, Visual Studio kolonun altını çizer ve "Colon bekleniyor" hatasını gösterir. :) – Spook

+3

Soru daha da iyi çünkü sadece açık soruyu cevaplamıyorsunuz, ancak örtük bir soruya cevap veriyorsunuz: çözümün ne olduğunu. –