LoginSignup
5

More than 5 years have passed since last update.

【c#】拡張メソッドを使ってnullかどうかを確認する

Last updated at Posted at 2018-07-15

概要

コードを書いている時に、毎回nullチェックを書くのが苦痛になってきたので、拡張メソッドを使って関数化させたほうが途中まで打ってインテリジェンスが使えるのと、デバッグコードを仕込む時にも大変便利なのではないかなと使いやすくしようというのが目的です。

実装

C#では全ての型(既に定義済みの型、ユーザー定義型、参照型、値型)がObjectを直接、又は間接的に継承しているのでObjectで拡張メソッドを書きます。

public static bool isNull(this System.Object obj)
{
   return obj == null;
}

反対にnullじゃなければも拡張メソッドを使って関数化させます。


public static bool isNotNull(this System.Object obj)
{
   return obj != null;
}

ただ、この方法をそのままチーム開発でやると、人によっては通常のnullチェックをしてるけど、
拡張メソッドでチェックしてる人がいるという事が起き得ると思うので、あらかじめNullチェックする際のコーディング規約を決めたほうがリファクタリングやソースレビューする際にスムーズに進むと思います。

参考

object (C# リファレンス)
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/object

追記 7/20

@soiさんから、int型などnullになりえない型でも拡張メソッドが使えてしまうので、
ジェネリックメソッドにしてnullになるものだけ使えるようにしたほうがいいという指摘を受けました。


public static bool isNull<T>(this T obj) where T : class
{
   return obj == null;
}

public static bool isNull<T>(this T? obj) where T : struct
{
   return obj == null;
}

whereを使ってclassやnull許容型のstructなどnullになるものだけを制約するようにします

参考
where (ジェネリック型制約) (C# リファレンス)
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/where-generic-type-constraint

Null 許容型 (C# プログラミング ガイド)
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/nullable-types/

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5