皆さん、こんにちは!
上越市を拠点にし、「FA設備・装置開発」と「画像処理」に強い会社、NSIです!
私達は豊富な経験と専門知識で、各種業界の自動化・システム化のお手伝いをしています。
長かった冬も終わりに近づき、もうすぐ春ですね。
3月に入り、これからどんどん暖かくなっていくまであと少し!
暖かくなると出かけたくなりますが、この時期は花粉も元気に飛び回っています…。
花粉症の皆さん、今年も気を引き締めて行きましょう!
今回は久しぶりのプログラムネタです。
「C#のnullチェックの必要性と記述方法」についてまとめてみました。
nullチェックの必要性とは?
プログラミングにおける null(ヌル)とは、「何もない状態」や「値が設定されていない状態」を意味します。この状態を、トイレットペーパーに例えてみましょう。

通常、トイレットペーパーホルダー(= holder)には、何らかのトイレットペーパーがセットされています。しかし、nullの状態とは、「ホルダーが完全に空っぽ」の状態です。
C#をはじめとする多くの言語では、参照型(class や string などのオブジェクト)がnull になる可能性があります。しかし、null のまま変数にアクセスしようとすると、NullReferenceException というエラーが発生し、プログラムがクラッシュする原因になります。そのため、トイレットペーパーがあるかどうかを確認するように、適切な null チェックを行うことが重要です。
nullチェックが必要な理由として、主に次の理由が挙げられます。
- プログラムの安定性を確保
NullReferenceException を防ぐことで、アプリケーションが予期せずクラッシュするのを防ぐ。 - 可読性と保守性の向上
明示的に null をチェックすることで、コードの意図が明確になり、他の開発者が理解しやすくなる。 - バグの予防
null による意図しない挙動(例: データが取得できない、処理が進まない)を未然に防げる。
nullチェックの方法
C# ではnullによるエラーを防ぐために、さまざまなnull チェックの方法が用意されています。
ここでは、それぞれの方法とメリット・デメリットをコード付きで分かりやすく解説していきます!
1.if文
null チェックの最も基本的な方法は、if 文を使ったnullチェックです。
if (obj == null)
{
Console.WriteLine("obj is null");
}
else
{
Console.WriteLine("obj is not null");
}
⭕ 直感的で分かりやすく、C#すべてのバージョンで使用可能。
❌ 冗長になりがちで、簡単なnullチェックでも行数が増えてしまう。
2.三項演算子(? :)
if 文の代わりに三項演算子を使うと、null チェックを1行で記述できます。
string message = (obj == null) ? "obj is null" : "obj is not null";
Console.WriteLine(message);
⭕ コードを短く書けるため、簡単なnullチェックに最適。
❌ 複雑な条件には向かず、可読性が下がることがある。
3.null 合体演算子(??)
??演算子を使うと、nullの場合にデフォルト値を代入できます。
例えば、nullの場合に “Default Name” を設定するには次のように書きます。
string name = null;
string displayName = name ?? "Default Name";
Console.WriteLine(displayName);
⭕ デフォルト値を設定でき、nullによるエラーを防げる。
❌ デフォルト値が不要な場合は使いにくく、関数呼び出しを入れるとパフォーマンス影響が出ることがある。
4.null 条件演算子(?.)
?.演算子を使うと、nullの場合にプロパティやメソッドのアクセスをスキップできるので、NullReferenceExceptionを防ぐことができます。
int? count = obj?.Count; // obj が null の場合、count には null が入る
Console.WriteLine(count);
⭕ null の場合でも安全にプロパティやメソッドにアクセスできる。
❌ 戻り値が null になるため、その後の処理に注意する必要がある。
5.null 合体演算子(??)と null 条件演算子(?.)
?. で安全にアクセスし、?? でデフォルト値を設定する方法は、nullチェックの方法として非常に強力です。
List<int> numbers = null;
int count = numbers?.Count ?? 0;
Console.WriteLine(count); // 出力: 0
⭕ nullによるエラーを防ぎつつ、デフォルト値を設定可能。
❌ どこでnullが発生するかを意識して使う必要があり、少し難しく感じる。
6.is null / is not null
C# 7.0 以降では、is nullを使ってnullチェックをより分かりやすく記述できます。
if (obj is null)
{
Console.WriteLine("obj is null");
}
if (obj is not null)
{
Console.WriteLine("obj is not null");
}
⭕ != null よりも可読性が上がり、nullチェックの意図が明確になる。
❌ C#7.0以降でしか使えない。
7.null 許容参照型(Nullable Reference Types)
C# 8.0以降では、null許容参照型を有効にすると コンパイラがnullの可能性を警告してくれます。
string? nullableString = null; // OK
string nonNullableString = null; // コンパイルエラー(null非許容)
⭕ コード記述時に警告が出るため、nullによるバグを未然に防げる。
❌ C#8.0以降でしか使えない。
まとめ
各方法を様々な観点から、表にまとめてみました。
簡潔さ → コードが短くすっきりしているか?
安全性 → NullReferenceException を防ぐのに有効か?
可読性 → コードが直感的に理解しやすいか?
パフォーマンス影響 → 軽量に動作するか?
方法 | 説明 | C#のバージョン | 簡潔さ | 安全性 | 可読性 | パフォーマンス影響 |
---|---|---|---|---|---|---|
if文 | 基本のnullチェック | 全バージョン | ✕ | ○ | ○ | ○ |
三項演算子(? :) | コンパクトなif文 | 全バージョン | ○ | ○ | △ 長くなると読みにくい | ○ |
??(null 合体演算子) | null のときにデフォルト値を設定 | C#6.0~ | ○ | △ 値が必要 | ○ | ○(△) デフォルト値の設定方法によっては影響あり |
?.(null 条件演算子) | nullのときにアクセスをスキップ | C#6.0~ | ○ | ○ | ○ | ○ |
?? + ?. | ?? と ?. を組み合わせる | C#6.0~ | ○ | ○ | ○ | ○ |
is null / is not null | If文の可読性を向上 | C#7.0~ | ○ | ○ | ○ | ○ |
Nullable Reference Types | nullの可能性を型レベルで管理 | C#8.0~ | ○ | ○ | ○ | △ コンパイラの警告処理あり |

状況に応じて、適切な方法を選ぶのがベスト!
最後に
今回は C#のnullチェックの必要性と記述方法 について解説しました。
null チェックにはさまざまな記述方法があり、状況に応じて適切な方法を選ぶことが重要です。
適切な null チェックを行うことで、エラーを防ぎつつ、読みやすく保守しやすいコードを書くことができます。
ここまで読んでいただき、ありがとうございました。
ご質問・ご要望・ご相談などは、下記お問い合わせフォームからお気軽にご連絡ください。
http://www.net-nsi.co.jp/toiawase.html

この記事が役に立ったらGoodボタンを押してね~