C 空值傳播運算子

2021-10-06 07:13:06 字數 932 閱讀 9404

在程式開發時,會遇到大量的**都需要驗證空值條件。如果不做處理,遇到空值會丟擲錯誤資訊, 所以要養成乙個良好的習慣,檢查空值。當然,在實際開發中,總是很容易漏掉這樣的檢查。 我們先看乙個例子:

public void showperson(person person)

這段**檢查了 person物件是否為空,如果為空則return 不再執行後面的邏輯。

那我們用空值傳播運算子寫個例子:

public void showperson(person person)

上面這個例子使用了 "?" 當 person 不為空時繼續執行右邊的**, 反之返回null

這裡就有乙個有趣的問題了, string是值型別,不接受null 這明顯有 bug啊 ? 這就厲害了,還記得前面講過的空值合併嗎?

來看這個例子,打一套組合拳:

public void showperson(person person)

?? 右邊的值是為了防止左邊的結果為空。 雖然問號多了點, 但是其原理還是非常簡單。

還可以多個空值傳播運算子進行組合。看例:

// 不使用空值運算子

public void showperson(person person)

}// 使用空值運算子

public void showperson(person person)

陣列也可使用空值傳播運算子:

int arr = null;

int x = arr[0]; // 傳統寫法

int x = arr ? [0] ?? 0; // 使用了組合拳

C 空合併運算子

c 除了有?這個三元運算子以外 還有兩個問號?運算子叫做空合併運算子,用來判斷null值取空非常方便 string c a b a是值型別string,如果a是null,那麼c b,否則c a。這樣就會有新的需求,如果a是乙個物件 引用型別 a有name欄位,我們需要在a不是null的時候獲取a.n...

空接合運算子, 可空型別和運算子,typeof

空接合運算子空接合運算子 提供了一種快捷方式,可以在處理可空型別和引用型別時表示null值。這個運算子放在兩個運算元之間,第乙個運算元必須是乙個可空型別或引用型別,第二個運算元必須與第乙個運算元的型別相同,或者可以隱含地轉換為第乙個運算元的型別。空接合運算子的計算如下 如果第乙個運算元不是null,...

空接合運算子, 可空型別和運算子,typeof

空接合運算子空接合運算子 提供了一種快捷方式,可以在處理可空型別和引用型別時表示null值。這個運算子放在兩個運算元之間,第乙個運算元必須是乙個可空型別或引用型別,第二個運算元必須與第乙個運算元的型別相同,或者可以隱含地轉換為第乙個運算元的型別。空接合運算子的計算如下 如果第乙個運算元不是null,...