【C# 6.0】判斷空值

介紹C# 6.0新功能-「Null 條件運算子」介紹,包含「?.」和「??」。

C# 6.0發表時間:2015年7月,始於.NET Framework 4.6,Visual Studio 2015。

 

C# 6.0新功能中的「Null 條件運算子」是個語法糖,意思是用簡單的表達方式可以進行空值的判斷後取值。

官網的提供的說明為:「Null 條件運算子」讓 Null 檢查更容易且流暢。 請將成員存取 . 取代為 ?.。他們的意思僅僅把「.」變成「?.」,也就是「MyData.Name」變成「MyData?.Name」。其中還有一個範例為「??」,此代表如果為空值要用右邊的值取代。

廢話不多說,直接看實際案例吧!

 

string data = "name=ey,age=100";  //設定變數
GetMyData(data);
Console.WriteLine("===line===");

GetMyData(null);
Console.WriteLine("===line===");

GetMyData("MyData");
Console.WriteLine("===line===");
Console.ReadKey();
public static void GetMyData(string data)
{
    //Check:確認是否有資料,有的話算字串的長度。大於0表示為有字
    if (data?.Length > 0)
    {
        string[] tmp = data.Split(',');

        //Check: 判斷是否空值,如果不是的話,判斷Contains。是的話回傳false
        foreach(var str in tmp)
        {
            if (data?.Contains("=") ?? false)
            {
                string[] splitStr = str.Split('='); 
                Console.WriteLine($"{splitStr[0]} 是 {splitStr[1]}");
            }
            else
            {
                Console.WriteLine("My data is empty");
            }
        }
    }
    else
    {
        Console.WriteLine("message is empty");
    }
}

假設,我們有一個變數string data = "name=ey,age=100"放在GetName內,成呼叫GetName(data)功能。從上面的程式碼中,可以看到第一個Null條件運算子?.,從原本的data.Length變成data?.Length,這樣整個if內的動作會變成:

  • 步驟一:先判斷是否空值,如果不是的話執行步驟二,是的話擇為false
  • 步驟二:執行Length功能,然後判斷長度是否大於0,是的就回傳true,否則是false

因為傳入的字串大於0,因此就會執行內部的功能。

 

而第二說明的運算子為「??」,則是加強上面兩個步驟,就會變成:

  • 步驟一:先判斷是否空值,如果不是的話執行步驟二;是null的話,我們給他一個值,此處給的值是false
  • 步驟二:執行Contains功能,是否有「=」,有的就回傳true,否則是false

??」意思是左邊是否為null,如果是的話給右邊的值,也就是我們可以給予他特定的值。假設是data?.Contains("=") ?? 0,如果datanull的話,就會給予值0。這樣的好處是,可以在null的時候給予預設值,減少if...else...的判斷式。

 

因此最後結果會是:

name 是 ey
age 是 100
===line===
message is empty
===line===
My data is empty
===line===

 

-----

以上如有謬誤,懇請告知

=====

可參考網站:https://docs.microsoft.com/zh-tw/dotnet/csharp/whats-new/csharp-6#null-conditional-operators

~Copyright by Eyelash500~

IT技術文章EY*研究院
iT邦幫忙eyelash*睫毛
Blog睫毛*Relax
Facebook睫毛*Relax