不賣關子,直接開門見山:java
C#中兩個問號的做用是判斷??左邊的對象是否爲null,若是不爲null則使用??左邊的對象,若是爲null則使用??右邊的對象。編程
好比:a = b ?? c,若是b爲null,則a = c,若是b不爲null,則a = b。spa
下面一段代碼演示了這兩種狀況:code
static void Main(string[] args) { NewFuck(); Shit(); Console.ReadKey(); } private static void NewFuck() { string fuck = "Fuck"; Console.WriteLine(fuck ?? "fuck not found."); } private static void Shit() { object shit = null; string b = (string)shit ?? "shit not found."; Console.WriteLine(b); }
執行結果如圖如真相:對象
很明顯,這種相似三目表達式的運算符能夠用來在妹子面前裝B,看個直觀的例子:string
//文藝Fuck private static void NewFuck() { string fuck = "Fuck"; Console.WriteLine(fuck ?? "fuck not found."); } //普通Fuck private static void Fuck() { string fuck = "Fuck"; string s = fuck != null ? fuck : "fuck not found."; Console.WriteLine(s); } //2BFuck private static void SBFuck() { string fuck; fuck = "Fuck"; string s; if (fuck != null) { s = fuck; } else { s = "fuck not found."; } Console.WriteLine(s); }
這三個方法在結果上是相同的,都會在屏幕上輸出Fuck。固然,寫個例子只是Demo級別的,咱們在實際編程的時候用??運算符每每更有用,能夠省去不少麻煩。好比處理頁面QueryString的時候:it
// 原先要這樣處理參數: string tmd = String.Empty; if (Request["Select"] != null) { tmd = Request["Select"]; } else { tmd = "All"; } // 如今重構爲: string tmd1 = Request["Select"] ?? "All";
怎麼樣?有沒有以爲屌爆了。Session什麼的也能夠這麼處理。順便提一句,實際項目中處理參數比這個要複雜。每每包括類型轉換等操做。類型轉換建議用as操做符,強轉很差。