一:字串嵌入值
我想string.format方法就是化成灰大家都認識,比如下面**:
1這個format有乙個不好的地方就是,如果佔位符太多,就特別容易搞錯,如果你少了乙個引數,**就會報錯。class
bird2"
, name);8}
9 }
因為容易報錯,所以為了保險起見就用字串拼接的方式來實現,但是我也知道字串拼接是耗時的一種操作,寫個stringbuilder又嫌麻煩,
還好c#6.0中提供了一種新鮮玩法,先看**:
1然後就迫不及待的去看看底層怎麼玩的,其實在下面的il圖中可以看到,在底層最終還是呼叫了string.format方法來實現的。class
bird
2", name);89
var result = "
\:\";10
11console.writeline(result);12}
13 }
二:using靜態類
這種寫法看起來有點不倫不類的,乍一看也沒有什麼用處,不過可以告訴我們乙個原理,就是不管你上層怎麼變,編譯器還是一樣使用
全命名,這就叫萬變不離其宗吧。
三:空值判斷
先還是來看看這種玩法的真容。
1是不是看著有點眼暈?那就對了,編譯器就是這樣靜靜的端著碗看著我們寫這些裝逼的**,不過再怎麼裝逼,也逃不過ildasm的眼睛。class
bird
27 }
其實仔細看il**之後,覺得一切還是那麼的熟悉,重點就是這個brtrue.s。它的狀態也決定了兩條執行流,不過在il上面也看到了v_1這個編譯
器給我們單獨定義的乙個變數,**還原如下:
1四:nameof表示式class
bird213
else
1417
}18 }
當我知道這個關鍵字的用途時,我的第一反應就是公司框架裡面的logmanager類,當我們new logmanager的時候,會同時把當前的類名
傳遞下去,然後做些後期處理,但是在以前我們只能這麼做,要麼用反射,要麼寫死。
我想大家也能看到,第一種使用了反射,這是需要讀取元資料的,效能***,第二個雖然是字串,你也看到了,是寫死的方式,這個時候就
急需乙個加強版,就像下面這樣。
看到il後,反正我是雞動了。。。nameof具有上面兩者的優點,既靈活,效能又高。。。。不錯不錯,贊一下。
看看C 6 0中那些語法糖都幹了些什麼(上篇)
今天沒事,就下了個vs2015 preview,前段時間園子裡面也在熱炒這些新的語法糖,這裡我們就來看看到底都會生成些什麼樣的il?一 自動初始化屬性 確實這個比之前的版本簡化了一下,不過你肯定很好奇,到底編譯器給我們做了哪些東西呢?從這張圖中可以看到,在ctor中k backingfield ct...
看看C 6 0中那些語法糖都幹了些什麼(上篇)
今天沒事,就下了個vs2015 preview,前段時間園子裡面也在熱炒這些新的語法糖,這裡我們就來看看到底都會生成些什麼樣的il?一 自動初始化屬性 確實這個比之前的版本簡化了一下,不過你肯定很好奇,到底編譯器給我們做了哪些東西呢?從這張圖中可以看到,在ctor中k backingfield ct...
看看C 6 0中那些語法糖都幹了些什麼(上篇)
今天沒事,就下了個vs2015 preview,前段時間園子裡面也在熱炒這些新的語法糖,這裡我們就來看看到底都會生成些什麼樣的il?一 自動初始化屬性 確實這個比之前的版本簡化了一下,不過你肯定很好奇,到底編譯器給我們做了哪些東西呢?從這張圖中可以看到,在ctor中k backingfield ct...