Üçlü operatörü enterpolasyonlu bir dize içinde nasıl kullanılır?


408

Neden bu kod derlemek olmaz karışık:

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

Eğer ayırırsam, iyi çalışır:

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

9
@Sinatr Güncelleme bağlantısı: thebillwagner.com/Blog/Item/…
Nate Barbettini

Aynısı ad alanı diğer adı niteleyicisi (: :) için de geçerlidir .
Uwe Keim

Roslyn ekibi ile ilgili tartışma
mins

Yanıtlar:


722

Belgelere göre :

Enterpolasyonlu bir dizenin yapısı aşağıdaki gibidir:

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

Sorun şu ki, iki nokta üst üste biçimlendirmeyi belirtmek için kullanılır, örneğin:

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

Solüsyon etmektir sarmak parantez içinde Şartlı:

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

2
: Bir iç içe enterpolasyon dizesi kullanmak gerektiğinde Daha da ilginç bir örnek bu biridir Console.WriteLine($"Cargo Weight: {(ship.WeightAvailable ? $"{ship.Weight:0.00}" : "n/a")}");
Jan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.