跳至頁尾內容
Iron Academy Logo
學習C#
學習C#

其他類別

理解C#空值合併運算符

Gerald Versluis
12m 43s

在C#中,空合併運算子 (??) 允許開發人員簡化空值檢查邏輯,減少程式碼冗長性並提高可讀性。 該運算子提供了一種簡潔方法來為遇到的空值賦予回退值,而不是寫冗長的if-else條件。 在本文中,我們將透過Gerald Versluis的影片《Understanding C# Null Coalescing Operator (??》來詳細探討空合併運算子。 and ??=)》](https://www.youtube.com/watch?v=aIp0jUr6A24&list=PLfbOp004UaYWWOZFZ585BCeRvTduLt9Fm&index=11)。我們將分解影片中的關鍵部分,分析Gerald如何展示這個實用的C#特性

簡介

在影片的開頭,Gerald介紹了空合併運算子這一C#中的強大特性,它顯著減少了空值檢查所需的程式碼行數。 他強調,這一運算子簡化了條件檢查,使程式碼更具可讀性。 為了說明其優點,Gerald展示了一個範例應用程式,在那裏他實作並解釋了空合併運算子的各種使用案例。

範例應用程式大綱

Gerald從設置一個簡單的控制台應用程式開始。 他提到,在之前的影片中,他使用try.dot.net網站進行演示,但由於版本限制(僅支持C# 7),他轉而使用Visual Studio for Mac。 他保證這些範例在Visual Studio for Windows上也能正常運行。

為了準備演示,Gerald建立了一個基本的Name屬性:

public class Person 
{
    public string Name { get; set; }
}
public class Person 
{
    public string Name { get; set; }
}

然後,他初始化這個類的實例來展示空合併運算子在實際情況下的運作。

用空合併運算子 (??) 取代空檢查

Gerald現在演示了如何使用空合併運算子 (??) 簡化空值檢查邏輯。 他將Name屬性設為空,然後使用?? 提供回退值:

var name = person.Name ?? "Gerald";
var name = person.Name ?? "Gerald";

Gerald解釋說,在此運算子出現之前,開發人員會使用if語句:

string name;
if (person.Name == null)
{
    name = "Gerald";
}
else
{
    name = person.Name;
}
string name;
if (person.Name == null)
{
    name = "Gerald";
}
else
{
    name = person.Name;
}

通過使用??,這一邏輯減少為一行。當person.Name為空時,'Gerald'被賦予其值; 否則,person.Name則保留原值。 他運行程式並確認輸出正確。

空合併拋出異常

接下來,Gerald探討了另一個使用案例:使用空合併運算子拋出異常。 他演示了如何在遇到空值時拋出異常,而不是提供回退值:

var name = person.Name ?? throw new ArgumentNullException(nameof(person.Name), "Name cannot be null");
var name = person.Name ?? throw new ArgumentNullException(nameof(person.Name), "Name cannot be null");

Gerald指出,這在使用方法參數或屬性時特別有用,因為不應允許空值。 他解釋說,這一特性是在C# 7或8中引入的,具體取決於專案設置。 執行帶有ArgumentNullException,有效地防止了意外的空引用。

空合併複合賦值 (??=)

Gerald繼續討論空合併複合賦值 (??=) 運算子,這種方法提供了更簡化的方式來賦予預設值。 取而代之的是書寫:

if (person.Name == null)
{
    person.Name = "Gerald";
}
if (person.Name == null)
{
    person.Name = "Gerald";
}

他用以下方法簡化:

person.Name ??= "Gerald";
person.Name ??= "Gerald";

Gerald解釋說,??=僅在左操作數為空時賦予指定值。 如果person.Name已經有值,則不變。 這個運算子在初始化字段或確保變數不會為空時特別有用。

與空條件運算子的結合

在最後的部分,Gerald演示了如何將空合併運算子與空條件運算子 (?.) 結合使用。 空條件運算子允許安全存取屬性,而不會引起NullReferenceException。 他提供了一個範例:

var length = person?.Name?.Length ?? 0;
var length = person?.Name?.Length ?? 0;

Gerald解釋說,這確保了當Name為空時,結果預設為0,而不是拋出異常。 這組合在處理可空引用型別或複雜的物件層次結構時非常有用。

結論

整段影片中,Gerald Versluis有效地解釋了空合併運算子(??)和空合併複合賦值(??=)的威力。 他展示了這些運算子如何取代傳統的空檢查,使程式碼更簡潔且易讀。 通過利用這些特性,開發人員可以編寫出更乾淨且更高效的C#應用程式。

如果您有興趣看到這些概念的實際應用,請觀看Gerald Versluis的完整影片《Understanding C# Null Coalescing Operator (??》 and ??=)》。

Hero Worlddot related to 理解C#空值合併運算符
Hero Affiliate related to 理解C#空值合併運算符

分享您所愛以賺取更多報酬

您是否為使用 .NET、C#、Java、Python 或 Node.js 的開發者建立內容?將您的專業知識轉化為額外收入!

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話