C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のNullReferenceExceptionとは?発生原因と対処法をわかりやすく解説

NullReferenceExceptionとは

NullReferenceExceptionは、C#プログラムにおいて、nullを参照しているオブジェクトのメンバーフィールドやメソッドにアクセスしようとしたときに発生する例外です。

つまり、実体(インスタンス)が存在しないオブジェクトに対して操作を行おうとすると、このエラーがスローされます。C#開発において最も頻繁に遭遇する例外の一つと言われています。

発生例

以下は、nullが代入された文字列変数のLengthプロパティにアクセスしようとして、NullReferenceExceptionが発生する例です。

using System;

class Demo {
    static void Main() {
        string str = null;

        if (str.Length > 0) {
            Console.WriteLine(str);
        }
    }
}

実行結果

上記のコードを実行すると、nullを参照しているメンバーにアクセスしようとしたため、次のようにNullReferenceExceptionがスローされます。

Unhandled Exception:
System.NullReferenceException: Object reference not set to an instance of an object
at Demo.Main () [0x00002] in <0bc5fbf292484d5194a19866ae5c2018>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: Object reference not set to an instance of an object
at Demo.Main () [0x00002] in <0bc5fbf292484d5194a19866ae5c2018>:0

対処法・防止策

NullReferenceExceptionを防ぐ最も基本的な方法は、オブジェクトにアクセスする前にnullチェックを行うことです。

using System;

class Demo {
    static void Main() {
        string str = null;

        if (!string.IsNullOrEmpty(str)) {
            Console.WriteLine(str);
        } else {
            Console.WriteLine("文字列はnullまたは空です");
        }
    }
}

また、C# 6.0以降ではnull条件演算子(?.を使用することで、より簡潔にnullチェックを記述できます。nullの場合でも例外が発生せず、nullが返されるため安全です。

int? length = str?.Length;
Console.WriteLine(length ?? 0); // strがnullの場合は0を出力

このように、nullチェックを適切に行うことで、NullReferenceExceptionによる予期しないクラッシュを回避できます。

  1. JavaScriptのオブジェクト初期化子とは?使い方をサンプルコードで解説

    オブジェクト初期化子とは オブジェクト初期化子(Object Initializer)は、新しく生成したオブジェクトを初期化するための式です。波括弧 {} の中に、「プロパティ名」と「それに対応する値」のペアを0個以上、カンマ区切りで列挙して記述します。 これにより、変数宣言と同時にオブジェクトの中身を簡単に定義することができます。 以下は、JavaScriptでオブジェクト初期化子を使用したサンプルコードです。 サンプルコード <!DOCTYPE html> <html lang="en"> <head> <meta chars

  2. HTML DOM の HTML オブジェクトとは?基本の構文と実装例をわかりやすく解説

    HTML オブジェクトとはHTML DOM における HTML オブジェクトは、HTML ドキュメントのルート要素である <html> 要素を表します。このオブジェクトにアクセスすることで、ページ全体の構造や内容を JavaScript から操作できるようになります。ここでは、HTML オブジェクトへのアクセス方法と、実際に動作するサンプルコードを紹介します。構文HTML オブジェクトにアクセスする基本的な構文は以下のとおりです。document.getElementsByTagName(HTML)getElementsByTagName() メソッドにタグ名 HTML を指定する