C#處理null的幾個語法糖,非常實用。(尤其是文末Dictionary那個案例,記得收藏)如果左邊是的null,那么返回右邊的操作數,否則就返回左邊的操作數,這個在給變量賦予默認值非常好用。int? a = null;
int b = a ?? -1;
Console.WriteLine(b); // output: -1
二、??=
當左邊是null,那么就對左邊的變量賦值成右邊的
int? a = null;
a ??= -1;
Console.WriteLine(a); // output: -1
三、?.
當左邊是null,那么不執行后面的操作,直接返回空,否則就返回實際操作的值。
using System;
public class C {
public static void Main() {
string i = null;
int? length = i?.Length;
Console.WriteLine(length ?? -1); //output: -1
}
}
四、?[]
索引器操作,和上面的操作類似
using System;
public class C {
public static void Main() {
string[] i = null;
string result = i?[1];
Console.WriteLine(result ?? "null"); // output:null
}
}
注意,如果鏈式使用的過程中,只要前面運算中有一個是null,那么將直接返回null結果,不會繼續計算。
下面兩個操作會有不同的結果。
using System;
public class C {
public static void Main() {
string[] i = null;
Console.WriteLine(i?[1]?.Substring(0).Length); //不彈錯誤
Console.WriteLine((i?[1]?.Substring(0)).Length) // System.NullReferenceException: Object reference not set to an instance of an object.
}
}
五、一些操作
//參數給予默認值
if(x == null) x = "str";
//替換
x ??= "str";
//條件判斷
string x;
if(i<3)
x = y;
else
{
if(z != null) x = z;
else z = "notnull";
}
//替換
var x = i < 3 ? y : z ?? "notnull"
//防止對象為null的時候,依然執行代碼
if(obj != null)
obj.Act();
//替換
obj?.Act();
//Dictionary取值與賦值
string result;
if(dict.ContainKey(key))
{
if(dict[key] == null) result = "有結果為null";
else result = dict[key];
}
else
result = "無結果為null";
//替換
var result= dict.TryGetValue(key, out var value) ? value ?? "有結果為null" : "無結果為null";
轉自:王者天涯
鏈接:cnblogs.com/dotnet-college/p/17067371.html
該文章在 2024/12/16 9:58:59 編輯過