C# 不同的方式檢查 Null

C# 不同的方式檢查 Null

多了解點沒錯的

最後更新 2021/6/19 下午2:24
沙漠尽头的狼
預計閱讀 3 分鐘
分類
.NET
標籤
.NET C#
  • 原文連結:https://www.thomasclaudiushuber.com/2020/03/12/c-different-ways-to-check-for-null/
  • 原文作者:Thomas
  • 翻譯:沙漠盡頭的狼

檢查參數值是否為空的經典方法是什麼?如果您已經使用 C 語言開發了一段時間,您可能會熟悉以下經典語法:

public static int CountNumberOfSInName(string name)
{
  if (name == null)
  {
    throw new ArgumentNullException(nameof(name));
  }

  return name.Count(c => char.ToLower(c).Equals('s'));
}

自 C# 7 開始,您可以使用 is 關鍵字進行 null 檢查,如下面的程式碼片段所示:

if (name is null)
{
  throw new ArgumentNullException(nameof(name));
}

但是對於 C# 7,甚至還有一個更短的語法。還引入了丟棄(discard)。它們是未使用且被忽略的變數,在程式碼中用底線(_)表示。結合 null 合併運算子(??),可以這樣編寫空檢查:

_ = name ?? throw new ArgumentNullException(nameof(name));

也就是說,整個方法看起來就像這樣:

public static int CountNumberOfSInName(string name)
{
  _ = name ?? throw new ArgumentNullException(nameof(name));

  return name.Count(c => char.ToLower(c).Equals('s'));
}

老實說,我真的很喜歡使用丟棄的最後一種方法,但是對於一些開發人員來說,這可能太多了。我認為 is 關鍵字非常清晰易讀。它是我的最愛。

is 關鍵字還有一個很大的優點,就是它忽略了任何 == / != 運算子或會覆載特定類別。不管是否有運算子覆載,它都將執行 null 檢查。這比僅僅使用 == 更好。你可以在這篇部落格文章中了解更多。

C# 9.0 中的 Is 關鍵字與 Not 模式

在 C# 9.0 中,如果您想檢查物件不為 null,那麼將 is 運算式與邏輯 not 模式結合起來是非常強大的。在 C# 9.0 之前,您必須使用如下的 is 運算式來檢查物件是否為 null:

if (!(name is null)) { }

一些開發人員傾向於使用以下語法來檢查 name 不為 null:

if (name is object) { }

但是上面的陳述既不可讀也不容易理解。這就是為什麼許多開發人員仍然喜歡經典的方式:

if (name != null) { }

但從 C# 9.0 開始,您可以編寫如下的非空檢查,我認為這是真正可讀的程式碼:

if (name is not null) { }

總結

因此,使用 C# 9.0,您可以編寫 null / not-null 檢查,如下所示,我認為這是可讀的:

if (name is null) { }

if (name is not null) { }

祝您程式愉快!

繼續探索

延伸閱讀

更多文章
同分類 / 同標籤 2026/2/7

AOT使用經驗總結

從專案建立伊始,就應養成良好的習慣,即只要添加了新功能或使用了較新的語法,就及時進行 AOT 發布測試。

繼續閱讀