介紹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
,如果data
是null
的話,就會給予值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