
【C#】nullの判定方法の色々
2022.06.02
nullの判定方法のいろいろ
nullの判定方法にも色々種類がある。
実際に自分でコードを書く時に使うのは1種類でも良いが、他の記述法を知っていれば何かのときに役立つだろう。
C#を使って仕事をしているので、今回はC#の null の判定についてまとめてみた。
hoge == null
1 2 3 4 5 6 7 8 9 10 | class HogeClass { // プロパティ } void HogeMethod(HogeClass hoge) { if (hoge == null) return; // hogeを使った処理 } |
ストレートでわかりやすい。
でもC#は演算子オーバーロードができるので、注意が必要らしいです。
演算子のオーバーロード - C# リファレンス | Microsoft Docs
(演算子にオーバーロードとかできるんだC#すごい。)
C++やpythonもできるらしい。
Object.ReferenceEquals
1 2 3 4 5 | void HogeMethod(HogeClass hoge) { if (Object.ReferenceEquals(hoge, null)) return; // hogeを使った処理 } |
null判定で使ってるの見たことない。
hoge is null
1 2 3 4 5 | void HogeMethod(HogeClass hoge) { if (hoge is null) return; // hogeを使った処理 } |
C# 7.0 パターンマッチングから使えるようになった方法。
オーバーロードされていない == と同義。
一番良く見るし、一番使ってる。
hoge.HogeStr ?? ""
1 2 3 4 5 6 7 8 9 | class HogeClass { string? HogeStr; } void HogeMethod(HogeClass hoge) { var str = hoge.HogeStr ?? ""; } |
null合体演算子。
やってることは hoge.HogeStr == null を判定して、左か右かどちらかを返却する。
hoge.HogeStr が null なら 右の""が返却される。null じゃなければ hoge.HogeStr が返却される。
hoge?.HogeStr
1 2 3 4 | void HogeMethod(HogeClass hoge) { var str = hoge?.HogeStr; } |
null条件演算子。
hoge == null を判定して、hoge.HogeStr か null を返却する。
hoge.HogeStr が null かどうかは関係ないので、 NullReferenceException に注意。
hoge?.HogeStr ?? ""
1 2 3 4 | void HogeMethod(HogeClass hoge) { var str = hoge?.HogeStr ?? ""; } |
null合体演算子とnull条件演算子の合せ技。
これがすごく使いやすくて見やすい。
hoge == null を判定して、nullじゃなければ、hoge.HogeStr == null を判定して、左か右かどちらかを返却する。
hoge が null だった場合は 右の "" が返却される。
1 2 | var hoge = hogeClassList.FirstOrDefault(e => e.Id == id); var str = hoge?.HogeStr ?? ""; |
LinqでClassのDefaultとして null が返却された時とか、いちいち if文で長々と書く必要がないのがとても良い。
if文にするとこんな感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | var str = ""; if(hoge == null) { str = ""; } else { if(hoge.HogeStr == null) { str = ""; } else { str = hoge.HogeStr; } } |
長いし、ちょっと直感的じゃない感じがする。
hoge?.HogeStr ?? "" 値あるならHogeStrだし、 null だったら "" ってぱっとわかりやすい。