C#でNullReferenceException(null参照例外)を防ぐ・適切に処理する方法
C#の開発において、NullReferenceException(null参照例外)は最も頻繁に発生するランタイムエラーの一つです。この記事では、null参照例外が発生する仕組みと、それを未然に防ぐための実践的な方法を解説します。
NullReferenceExceptionとは?
NullReferenceExceptionは、nullを参照しているオブジェクトのメンバー(フィールドやメソッド)にアクセスしようとしたときにスローされる例外です。つまり、実体が存在しないオブジェクトに対して操作を行おうとすると、プログラムがクラッシュしてしまいます。
null参照例外が発生する例
まず、以下のように文字列変数にnullを代入したケースを見てみましょう。
string str = null;
この状態で、次のようにnullの文字列に対してLengthプロパティへアクセスすると、例外がスローされます。
if (str.Length == 0) { }
strはどこも参照していないため、.Lengthにアクセスした時点でNullReferenceExceptionが発生します。
nullチェックで例外を防ぐ方法
null参照例外を防ぐ最も基本的な方法は、オブジェクトを使用する前にnullかどうかを確認することです。以下のコード例では、配列を受け取るメソッド内でnullチェックを行い、安全に処理を終了しています。
サンプルコード
using System;
class Program {
static void Main() {
int[] arr = new int[5] {1, 2, 3, 4, 5};
display(arr);
arr = null;
display(arr); // nullでも例外は発生しない
}
static void display(int[] arr) {
if (arr == null) {
return; // nullの場合は何もせず終了
}
Console.WriteLine(arr.Rank);
}
}
出力結果
1
コードのポイント
Mainメソッド内で、まず有効な配列をdisplayメソッドに渡し、その後nullを代入して再度呼び出しています。displayメソッド内では、if (arr == null)によるnullチェックを行い、nullの場合は早期リターンすることで例外の発生を回避しています。- 結果として、2回目の呼び出しでは何も出力されず、プログラムは正常に完了します。
その他のnull対策テクニック
nullチェック以外にも、C#には便利なnull安全のための機能が用意されています。
- null条件演算子(?.):
str?.Lengthのように記述すると、strがnullの場合に例外ではなくnullを返します。 - null合体演算子(??):
string s = str ?? "";のように、nullだった場合の代替値を指定できます。 - ArgumentNullException.ThrowIfNull:.NET 6以降では、引数が
nullの場合に明示的に例外をスローできるヘルパーメソッドもあります。
まとめ
NullReferenceExceptionは、nullのオブジェクトにアクセスすることで発生します。事前にnullチェックを行うこと、またnull条件演算子などの言語機能を活用することで、安全で堅牢なC#プログラムを書くことができます。日頃から「オブジェクトはnullになりうる」という意識を持ってコーディングすることが、例外によるクラッシュを防ぐ第一歩です。
-
Windowsでスクロール全体のスクリーンショットを撮る方法|ブラウザ標準機能から無料ツールまで
Windowsにはスクリーンショットを撮る方法が数多く用意されています。Win + PrtScn(またはFn + PrtScn)を押すだけで即座に画面をキャプチャできますし、「切り取り&スケッチ」という標準搭載ツールを使えば、ウィンドウの一部やポップアップメニューだけを切り取ることも可能です。 しかし、これらの方法で撮影できるのは、あくまで画面に表示されている範囲のみです。Webページやドキュメントのように、スクロールしないと見えない部分まで含めて1枚の画像として保存したい場合は、サードパーティ製アプリや拡張機能を利用する必要があります。 本記事では、Windowsでスクロール全体
-
Chromebookでスクリーンショットを撮る方法を徹底解説!ショートカットキーから拡張機能・スタイラスまで
Chromebookは、ユーザーの作業や生活をより快適にするために設計された、シンプルで扱いやすいマシンです。しかし、比較的新しいデバイスであるため、まだ知られていない機能も少なくありません。WindowsやMacでのスクリーンショットの撮り方はご存じの方が多いでしょうが、Chromebookでは同じ方法は使えません。とはいえ、難しいどころか、実はもっと簡単で、スクリーンショットをカスタマイズできるオプションも複数用意されています。Google Chromebookでスクリーンショットを撮るすべての方法をご紹介する前に、まず覚えておきたいキーボードのキーについて説明します。 Chromebo