• トップ
  • ブログ一覧
  • 【C#】nullの判定方法の色々 その1
  • 【C#】nullの判定方法の色々 その1

    やまちゃん(エンジニア)やまちゃん(エンジニア)
    2022.06.02

    IT技術

    nullの判定方法のいろいろ その1

    nullの判定方法にも色々種類がある。

    実際に自分でコードを書く時に使うのは1種類でも良いが、他の記述法を知っていれば何かのときに役立つだろう。

    C#を使って仕事をしているので、今回はC#の null の判定についてまとめてみた。

     hoge == null

    1class HogeClass
    2{
    3    // プロパティ
    4}
    5
    6void HogeMethod(HogeClass hoge)
    7{
    8    if (hoge == null) return;
    9    // hogeを使った処理
    10}

    ストレートでわかりやすい。

    でもC#は演算子オーバーロードができるので、注意が必要らしいです。

    演算子のオーバーロード - C# リファレンス | Microsoft Docs

    (演算子にオーバーロードとかできるんだC#すごい。)

    C++やpythonもできるらしい。

    Object.ReferenceEquals

    1void HogeMethod(HogeClass hoge)
    2{ 
    3    if (Object.ReferenceEquals(hoge, null)) return; 
    4    // hogeを使った処理 
    5}

    null判定で使ってるの見たことない。

    hoge is null

    1void HogeMethod(HogeClass hoge)
    2{ 
    3    if (hoge is null) return; 
    4    // hogeを使った処理 
    5}

    C# 7.0 パターンマッチングから使えるようになった方法。

    オーバーロードされていない == と同義。

    一番良く見るし、一番使ってる。

    hoge.HogeStr ?? ""

    1class HogeClass
    2{
    3    string? HogeStr;
    4}
    5
    6void HogeMethod(HogeClass hoge)
    7{
    8    var str = hoge.HogeStr ?? "";
    9}

    null合体演算子。

    やってることは hoge.HogeStr == null を判定して、左か右かどちらかを返却する。

    hoge.HogeStr が null なら 右の""が返却される。null じゃなければ hoge.HogeStr が返却される。

    hoge?.HogeStr

    1void HogeMethod(HogeClass hoge)
    2{
    3    var str = hoge?.HogeStr;
    4}

    null条件演算子。

    hoge == null を判定して、hoge.HogeStr か null を返却する。

    hoge.HogeStr が null かどうかは関係ないので、 NullReferenceException に注意。

    hoge?.HogeStr ?? ""

    1void HogeMethod(HogeClass hoge)
    2{
    3    var str = hoge?.HogeStr ?? "";
    4}

    null合体演算子とnull条件演算子の合せ技。

    これがすごく使いやすくて見やすい。

    hoge == null を判定して、nullじゃなければ、hoge.HogeStr == null を判定して、左か右かどちらかを返却する。

    hoge が null だった場合は 右の "" が返却される。

    1var hoge = hogeClassList.FirstOrDefault(e => e.Id == id);
    2var str = hoge?.HogeStr ?? "";

    LinqでClassのDefaultとして null が返却された時とか、いちいち if文で長々と書く必要がないのがとても良い。

    if文にするとこんな感じ。

    1var str = "";
    2if(hoge == null)
    3{
    4    str = "";
    5}
    6else
    7{
    8    if(hoge.HogeStr == null)
    9    {
    10         str = "";
    11    }
    12    else
    13    {
    14        str = hoge.HogeStr;
    15    }
    16}

    長いし、ちょっと直感的じゃない感じがする。

    hoge?.HogeStr ?? "" 値あるならHogeStrだし、 null だったら "" ってぱっとわかりやすい。

    やまちゃん(エンジニア)

    やまちゃん(エンジニア)

    おすすめ記事