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,甚至還有一個更短的語法。還引入了丟棄。它們是未使用且被忽略的變量,在代碼中用下劃線(_)。結合空合併運算符(??),可以這樣編寫空檢查:

_ = 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) { }

總結

So, with C# 9.0, you can write your null / not-nulll checks like below, and I think that’s readable: 因此,使用 c# 9.0,您可以編寫 null/not-null 檢查,如下所示,我認為這是可讀的:

if (name is null) { }

if (name is not null) { }

祝您編程愉快!

Keep Exploring

延伸阅读

更多文章
同分类 / 同标签 2026/2/7

aot使用經驗總結

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

继续阅读