NullReferenceExceptionの対処法
NullReferenceExceptionは、null参照を参照しようとしたときに発生するエラーです。
これは、オブジェクトがまだ作成されていないか、明示的にnullに設定されている場合に発生します。
今回の記事では、NullReferenceExceptionが発生してしまう事例と解決方法を解説していきます!
C#のエラー一覧はコチラ
-
【C# sharp】よく発生するエラー一覧10選 エラーの発生原因と対処方法
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る
ケース1: オブジェクトがまだ作成されていない
まず、オブジェクトがまだ作成されていない場合について見ていきましょう。
1 2 3 4 5 6 7 8 9 10 |
using System; class Program { static void Main() { string str = null; Console.WriteLine(str.Length); } } |
上記のコードでは、"str"という文字列変数を宣言していますが、具体的な値を設定していません。
そのため、str.Lengthを参照しようとすると、NullReferenceExceptionが発生します。
出力結果
System.NullReferenceException: Object reference not set to an instance of an object.
これを解決するためには、strに具体的な値を設定する必要があります。
1 2 3 4 5 6 7 8 9 10 |
using System; class Program { static void Main() { string str = "Hello, world!"; Console.WriteLine(str.Length); } } |
このようにstrに具体的な文字列を設定することで、str.Lengthを参照することができ、NullReferenceExceptionは発生しません。
出力結果
13
ケース2: 明示的にnullに設定されている
次に、明示的にnullに設定されている場合について見ていきましょう。
1 2 3 4 5 6 7 8 9 10 11 |
using System; class Program { static void Main() { string str = "Hello, world!"; str = null; Console.WriteLine(str.Length); } } |
上記のコードでは、初めにstrに具体的な文字列を設定していますが、その後でstrをnullに設定しています。
そのため、str.Lengthを参照しようとすると、NullReferenceExceptionが発生します。
System.NullReferenceException: Object reference not set to an instance of an object.
これを解決するためには、strをnullに設定した後でstr.Lengthを参照しないようにします。
1 2 3 4 5 6 7 8 9 10 11 |
using System; class Program { static void Main() { string str = "Hello, world!"; Console.WriteLine(str.Length); str = null; } } |
このようにstrをnullに設定する前にstr.Lengthを参照することで、NullReferenceExceptionは発生しません。
出力結果
13
ケース3: Null合体演算子を使用する
Null合体演算子を使用して、NullReferenceExceptionを防ぐ方法もあります。
1 2 3 4 5 6 7 8 9 10 |
using System; class Program { static void Main() { string str = null; Console.WriteLine(str?.Length ?? 0); } } |
上記のコードでは、Null合体演算子(??)を使用しています。これは、左辺がnullでない場合には左辺の値を、nullである場合には右辺の値を返す演算子です。
このため、strがnullの場合でもNullReferenceExceptionは発生せず、0が出力されます。
出力結果
0
ケース4: Null条件演算子を使用する
Null条件演算子を使用して、NullReferenceExceptionを防ぐ方法もあります。
1 2 3 4 5 6 7 8 9 10 11 |
using System; class Program { static void Main() { string str = null; int? length = str?.Length; Console.WriteLine(length.HasValue ? length.Value : 0); } } |
上記のコードでは、Null条件演算子(?.)を使用しています。これは、nullでない場合にだけアクセスを行い、nullの場合にはnullを返す演算子です。
このため、strがnullの場合でもNullReferenceExceptionは発生せず、0が出力されます。
出力結果
0
ケース5: nullチェックを行う
直接的な方法として、nullチェックを行うこともできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
using System; class Program { static void Main() { string str = null; if (str != null) { Console.WriteLine(str.Length); } else { Console.WriteLine(0); } } } |
上記のコードでは、strがnullでない場合にだけstr.Lengthを参照しています。
そのため、strがnullの場合でもNullReferenceExceptionは発生せず、0が出力されます。
出力結果
0
KindleUnlimited会員であれば、全ての本をご覧頂けます。 Linqを理解すれば、C#プログラミングの世界が変わる 第1版
まとめ
以上、C#でNullReferenceExceptionが発生したときの対処法について解説しました。
対策方法としては、オブジェクトが作成されていることを確認する、nullに設定する前に必要な操作を行う、Null合体演算子やNull条件演算子を使用する、nullチェックを行う、などがあります。
これらの方法を使い分けることで、NullReferenceExceptionを適切に対処できます。
最後まで読んで頂き、ありがとうございました。少しでもお役にたてたなら幸いです!
C#のエラー一覧はコチラ
-
【C# sharp】よく発生するエラー一覧10選 エラーの発生原因と対処方法
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る