- 原文へのリンク:https//www.thomasclaudiushuber.com/2020/03/12/c-different-ways-to-check-for-null/
- 著者:トーマス
- 翻訳:砂漠の果ての狼
パラメータの値が空かどうかをチェックする古典的な方法は何ですか?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 关键字还有一个很大的优点,就是它忽略了任何==/!=运算符或者重载特定类。不管是否有操作符重载,它都将执行 null 检查。这比仅仅使用==更好。你可以在这篇博文中了解更多。
C#9.0のIsキーワードとNotパターン
C#9.0では、オブジェクトがnullでないことをチェックしたい場合、is式と論理notパターンを組み合わせることが非常に強力です。C#9.0以前は、オブジェクトがnullかどうかをチェックするには次のis式を使用する必要がありました。
if (!(name is null)) { }
名前が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) { }
楽しいプログラミングを!