C#中兩個問號(a ?? b)的做用

不賣關子,直接開門見山: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操做符,強轉很差。
相關文章
相關標籤/搜索