2015-05-12 39 views
10

MVC 6 kaynak kodunda, $ işaretleriyle giden dizeleri olan bazı kod satırlarını gördüm.

Daha önce hiç görmediğim gibi, C# 6.0'da yeni olduğunu düşünüyorum. Emin değilim. (Keşke daha önce hiç geçmedi aksi şok olurdum, haklıyım umut

gibiydi.:.

var path = $"'{pathRelative}'"; 
+1

@JeroenVannevel Evet, şimdi ne olduğunu açıklıyor ama sorunun adı onu bulmakta zorlanıyor ve kabul edilen cevap eski. Yani bence hala sormaya değer mi? – Yves

+2

Bu bana bir kopya gibi görünmüyor. Zaten sizin için $ ne olduğunu bilmeden başka bir soru bulamazsınız. –

+2

@RichardDalton: Bu aynı soru olmadığı anlamına gelmez. Sorunun yeniden yazılması, * çoğaltmanın bir nedeni değildir. Bu kabul edilen cevapla ilgili değil, güncellemek için eklenen 2. cevapla ilgili. Bu soru kapalı kalmalıdır. Eğer katılmıyorsanız, daha fazla tartışmak için her zaman http://meta.stackoverflow.com/ var. –

cevap

18

Doğru konum, bu yeni C 6. özelliktir

bir dize önce $ işareti derleyici özel dize ayrıştırmak olacaktır. dize interpolasyon sağlar ve küme parantezi içindeki ifadelerin, yerinde dizeye değerlendirilecek ve eklenecektir.

aynı dönüşür kaputun altında bu gibi bir şey:

var path = string.Format("'{0}'", pathRelative); 

en bu pasajı için IL bakalım:

// var test = "1"; 
IL_0001: ldstr "1" 
IL_0006: stloc.0 

// var val1 = $"{test}"; 
IL_0007: ldstr "{0}" 
IL_000c: ldloc.0 
IL_000d: call string [mscorlib]System.String::Format(string, object) 
IL_0012: stloc.1 

// var val2 = string.Format("{0}", test); 
IL_0013: ldstr "{0}" 
IL_0018: ldloc.0 
IL_0019: call string [mscorlib]System.String::Format(string, object) 
IL_001e: stloc.2 

Yani iki derlenmiş uygulamada aynıdır: derler

var test = "1"; 
var val1 = $"{test}"; 
var val2 = string.Format("{0}", test); 

.


C# dize enterpolasyon sözdizimi ile ilgili bir not: Orijinal C 6. önizleme erken bloglarda çok fazla dikkat var bir different syntax çünkü maalesef sular dize enterpolasyon hemen çıkarıp bulandýrýlýyor. Dize enterpolasyonu için ters eğik çizgi kullanmaya yönelik çok fazla referans göreceksiniz, ancak bu artık sözdizimsel olarak geçerli değil.