2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C#のNull許容参照型を理解する

Posted at

はじめに

開発経験をしたことがある人であれば必ずと言っていいほど通る、NullReferenceException — 「オブジェクト参照がオブジェクト インスタンスに設定されていません」というエラーメッセージ
C#8.0で導入されたNull許容参照型は、この問題に対処するための機能

なぜNull許容参照型が必要なのか?

従来のC#では、すべての参照型は暗黙的にnullを許容していた
String型やList型などの変数には常にnull値を代入できた
これはコードの柔軟性を高める一方で、意図しないnull参照による実行時エラーも多発していた

以下は実行時にNullReferenceExceptionが発生する

test.cs
string name = null;
Console.Writeline(name.Length);

小規模なプログラムでは見落としは少ないかも知れ梅が、規模が大きくなると、実行時に初めて発見されるケースもあった

Null許容参照型の目的

Null許容参照型の主な目的は、コンパイル時にnull参照の可能性を検出し、警告すること

・実行時エラーを減らす
・コードの信頼性を向上させる
・nullの取り扱いを明示的にする
・開発者の意図を明確にする
など、これらの目的がある

基本的な構文

実装の方法は、型の後に「?」をつけるだけで、nullを持つ可能性があることを明示する

test.cs
string nonNull = "Hello";
nonNull = null; // 警告が出る

string? nonNull = "Hello";
nonNull = null; // Nullを許容してくれる

実践的なコード例

クラスのプロパティでの使用

test.cs
public class Person
{
    public string Name {get; set;}
    public string? MiddleName {get; set;}
    public string LastName {get; set;}
}

どのような場面で使うか

  1. 新規プロジェクト
    新しく始めるプロジェクトでは、最初からNull許容参照型を有効にすることで、堅牢なコードベースを構築できる

  2. APIの設計
    メソッドの引数や戻り値がnullを許容するかどうかを明示することで、使用者に対して明確に提供することができる

  3. 外部システムとの連携
    データベースやWeb APIからのデータは、nullになる可能性があります。こうした場面で、null許容参照型を使う
    ことで安全にデータを扱える

まとめ

Null許容参照型は、C#におけるNullReferenceExceptionとの戦いにおける強力な武器。
この機能を適切に使用することで:

開発効率の向上:コンパイル時にnull関連の問題を発見できる
コードの明確性:変数がnullになり得るかどうかが一目でわかる
アプリケーションの堅牢性:実行時エラーが減少する
チーム開発の効率化:コードの意図が明確になり、レビューしやすくなる

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?