• トップ
  • ブログ一覧
  • 【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 だったら "" ってぱっとわかりやすい。

    ライトコードでは、エンジニアを積極採用中!

    ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。

    採用情報へ

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

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

    おすすめ記事

    エンジニア大募集中!

    ライトコードでは、エンジニアを積極採用中です。

    特に、WEBエンジニアとモバイルエンジニアは是非ご応募お待ちしております!

    また、フリーランスエンジニア様も大募集中です。

    background