跳過到頁腳內容
Iron Academy Logo
學習 C#
學習 C#

其他分類

理解 C# 中的空合併操作符

Gerald Versluis
12m 43s

C#中的空合併運算子 (??) 允許開發者簡化空值檢查邏輯,減少程式碼冗長,提升可讀性。 此運算子提供一種簡潔的方法,在遇到空值時分配後備值,無需撰寫冗長的if-else條件。 在這篇文章中,我們將通過跟隨Gerald Versluis的影片《理解C#中的空合併運算子 (?? 和 ??=)](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。 他保證這些範例也適用於Windows上的Visual Studio。

為了準備演示,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的完整影片《理解C#中的空合併運算子 (?? 和 ??=)》。

Hero Worlddot related to 理解 C# 中的空合併操作符
Hero Affiliate related to 理解 C# 中的空合併操作符

通過分享您所愛的東西賺得更多

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

鋼鐵支援團隊

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