はじめに
開発経験をしたことがある人であれば必ずと言っていいほど通る、NullReferenceException — 「オブジェクト参照がオブジェクト インスタンスに設定されていません」というエラーメッセージ
C#8.0で導入されたNull許容参照型は、この問題に対処するための機能
なぜNull許容参照型が必要なのか?
従来のC#では、すべての参照型は暗黙的にnullを許容していた
String型やList型などの変数には常にnull値を代入できた
これはコードの柔軟性を高める一方で、意図しないnull参照による実行時エラーも多発していた
以下は実行時にNullReferenceExceptionが発生する
string name = null;
Console.Writeline(name.Length);
小規模なプログラムでは見落としは少ないかも知れ梅が、規模が大きくなると、実行時に初めて発見されるケースもあった
Null許容参照型の目的
Null許容参照型の主な目的は、コンパイル時にnull参照の可能性を検出し、警告すること
・実行時エラーを減らす
・コードの信頼性を向上させる
・nullの取り扱いを明示的にする
・開発者の意図を明確にする
など、これらの目的がある
基本的な構文
実装の方法は、型の後に「?」をつけるだけで、nullを持つ可能性があることを明示する
string nonNull = "Hello";
nonNull = null; // 警告が出る
string? nonNull = "Hello";
nonNull = null; // Nullを許容してくれる
実践的なコード例
クラスのプロパティでの使用
public class Person
{
public string Name {get; set;}
public string? MiddleName {get; set;}
public string LastName {get; set;}
}
どのような場面で使うか
-
新規プロジェクト
新しく始めるプロジェクトでは、最初からNull許容参照型を有効にすることで、堅牢なコードベースを構築できる -
APIの設計
メソッドの引数や戻り値がnullを許容するかどうかを明示することで、使用者に対して明確に提供することができる -
外部システムとの連携
データベースやWeb APIからのデータは、nullになる可能性があります。こうした場面で、null許容参照型を使う
ことで安全にデータを扱える
まとめ
Null許容参照型は、C#におけるNullReferenceExceptionとの戦いにおける強力な武器。
この機能を適切に使用することで:
開発効率の向上:コンパイル時にnull関連の問題を発見できる
コードの明確性:変数がnullになり得るかどうかが一目でわかる
アプリケーションの堅牢性:実行時エラーが減少する
チーム開発の効率化:コードの意図が明確になり、レビューしやすくなる