C# でのNullチェックのさまざまな方法

C# でのNullチェックのさまざまな方法

知っておいて損はありません

最終更新 2021/06/19 14: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) { }  

总结

因此,使用C# 9.0,您可以编写null/not-null检查,如下所示,我认为这是可读的:

if (name is null) { }  

if (name is not null) { }  

祝您编程愉快!

さらに探索

関連読書

その他の記事
同じカテゴリ / 同じタグ 2026/04/22

各OSバージョンの.NETサポート状況(250707更新)

仮想マシンとテストマシンを使用して、各OSバージョンの.NETサポート状況を確認します。OSインストール後、対応するランタイムをインストールし、Stardustエージェントを実行できることを確認します(合格条件)。

続きを読む
同じカテゴリ / 同じタグ 2026/02/07

AOTの使用経験のまとめ

プロジェクト作成当初から、新機能を追加したり新しい構文を使用したりした場合には、すぐにAOT公開テストを実施するという良い習慣を身につけるべきです。

続きを読む