※ この記事にはアフィリエイトリンクが含まれます
C#のプログラムでnull参照に悩んでいませんか?
よくあるポイントで詰まることは次の通りです。
- NullReferenceExceptionが頻出して原因がわからない
- どのnullチェック方法を使えば良いかわからない
- 最新の文法やベストプラクティスを知らない
結論から言うと、C#では複数のnullチェックの手法があり、用途に応じて使い分けると安全で読みやすいコードになります。
主な方法は次の通りです。
- 従来のifによるnullチェック
- null条件演算子(
?.)とnull合体演算子(??)の活用 - パターンマッチング(
is)やnullable参照型の利用
この記事を読むと、各手法の使いどころがわかり、実際にコードで試せる具体例と注意点が学べます。
初心者がつまずきやすい場面を避け、安全なコードを書くコツを得られます。
C#のnullチェックが重要な理由
まず、なぜnullチェックが必要かを理解しましょう。
null参照は実行時エラーの代表であり、予防が重要です。
コードの堅牢性と保守性を高めるため、適切なnullチェックを行うことで
バグを未然に防げます。
基本のnullチェック:if文での確認
最も基本的で直感的な方法はif文によるチェックです。
基本的な書き方
object obj = null;
if (obj != null)
{
// objを安全に扱う
}
else
{
// null時の処理
}
長所は読みやすさと明確さです。
短所は冗長になりやすい点です。
便利な演算子:?.(null条件演算子)
?.はオブジェクトがnullでない場合にメンバーにアクセスし、nullならnullを返します。
ネストした参照で便利です。
使用例
Person person = null;
var nameLength = person?.Name?.Length; // personがnullならnameLengthはnull
これによりNullReferenceExceptionの発生を抑えられます。
戻り値がnullになることを考慮して使いましょう。
値のデフォルト:??(null合体演算子)
??は左辺がnullなら右辺の値を返します。
デフォルト値の指定でよく使われます。
使用例
string text = null;
var safe = text ?? ""; // textがnullなら空文字を代入
??は?.と組み合わせて便利に使えます。
例えばperson?.Name ?? "未設定"のように記述できます。
代入と同時にチェック:??= 演算子
??=は左辺がnullのときだけ右辺を代入します。
遅延初期化などに適しています。
使用例
List<int> list = null;
list ??= new List<int>();
list.Add(1);
</int></int>この書き方でnullチェックと初期化を簡潔に行えます。
冗長なif文を減らせます。
パターンマッチング(is)での安全な取り出し
C#のパターンマッチングを使うと、nullチェックと型チェックを同時に行えます。
安全に値を取り出せます。
使用例
object obj = "text";
if (obj is string s)
{
// sはstring型かつnullでない
}
この方法はnullチェックを含めたポジティブチェックに向いています。
可読性も高くなります。
nullable値型(int?など)の扱い
int?などのnullable値型はHasValueやValueで中身を扱います。
直接nullと比較することも可能です。
使用例
int? n = null;
if (n.HasValue)
{
Console.WriteLine(n.Value);
}
else
{
Console.WriteLine(0);
}
また、n ?? 0という形でデフォルト値を使えます。
簡潔に値を取り出せるのが利点です。
nullable参照型(C# 8.0以降)の導入
C# 8から導入されたnullable参照型を有効にすると
コンパイル時にnullの可能性を警告できます。
プロジェクトでnullableを有効にするには設定が必要です。
有効にすると設計段階でnullを扱いやすくなります。
よくある間違いと注意点
初心者がやりがちなミスを押さえておきましょう。
小さな誤りが実行時の致命的なバグになります。
?.で戻る値がnullになることを忘れてそのまま使う- nullチェックをしているつもりでもスレッド間で状態が変わる可能性を無視する
- nullable参照型を無効にしたまま期待して使う
スレッドセーフな設計や、戻り値のnull許容を明確にする設計が重要です。
単純なチェックだけで安心しないことが大切です。
実践例:よくあるパターン別サンプル
ここでは具体的なシナリオ別に使い分けを示します。
初心者が実際に試せるコードを用意しました。
APIレスポンスの処理(null可能なプロパティ)
ApiResponse res = GetResponse();
var length = res?.Data?.Count ?? 0; // ネストしたnullを一行で扱う
このパターンは?.と??の組み合わせが最もシンプルです。
結果がnullのときに安全なデフォルトを返します。
コレクションの遅延初期化
public class Sample
{
private List<int> numbers;
public void AddNumber(int x)
{
numbers ??= new List<int>();
numbers.Add(x);
}
}
</int></int>初期化の有無を気にせずに使えるようになります。
コードが短く読みやすくなります。
テストとデバッグでの確認方法
nullチェックが正しく機能するかはテストで確かめましょう。
ユニットテストでnull時の挙動を検証するのが有効です。
テストケースでnull入力を用意し、期待する出力を定義します。
例外が出ないこと、期待するデフォルト値が返ることを確認します。
まとめ
C#のnullチェック方法は多様で、それぞれ長所が異なります。
目的に応じて使い分けることが重要です。
- 単純な条件分岐はif文で明確に書く
- プロパティアクセスでの安全性は?.を使う
- デフォルト値の指定は??や??=を活用する
- 型と非nullを同時に確認する場合はisパターンを使う
- プロジェクト全体でnullable参照型を導入して静的チェックを活用する
この記事を参考にして、実際のプロジェクトで
安全で読みやすいnullチェックを実践してください。

#エンジニアとして、もっと自分の力を活かしたいあなたへ
「このまま今の職場にいて、成長できるんだろうか?」
C#を使っている方なら、一度はそう感じたことがあるかもしれません。
実は今、C#/.NETエンジニアの市場価値は高まっており、
年収アップ・フルリモート・自社開発企業など、選べる選択肢は確実に増えています。
もし今後、C#を活かして働きたい、あるいは開発現場で経験を積みたいとお考えなら…
自分に合った転職サービスを早めに知っておくことが大きな武器になります。
現役エンジニアからのサポート付き・無料で学べるスクール・社内SE特化の求人など、
転職支援サービスを厳選したまとめ記事をこちらで紹介しています。

ここまで読んでいただきありがとうございました。
コメント