カテゴリ: C# 更新日: 2025/07/14

C#のnull条件演算子(?.)とは?null安全なアクセス方法を解説

C#のnull条件演算子(?.)とは?null安全なアクセス方法を解説
C#のnull条件演算子(?.)とは?null安全なアクセス方法を解説

先生と生徒の会話形式で理解しよう

生徒

「C#で、変数がnullのときにエラーにならないようにアクセスする方法ってありますか?」

先生

「ありますよ。C#では?.というnull条件演算子を使えば、安全にアクセスできます。」

生徒

「null条件演算子ってどうやって使うんですか?」

先生

「それでは、null条件演算子の基本的な使い方を見てみましょう!」

1. null条件演算子(?.)とは?

1. null条件演算子(?.)とは?
1. null条件演算子(?.)とは?

C#の?.は、「null条件演算子(null-conditional operator)」と呼ばれます。この演算子を使うことで、オブジェクトがnullかどうかを自動でチェックしながら、安全にプロパティやメソッドにアクセスすることができます。

通常、オブジェクトがnullである状態でそのプロパティやメソッドにアクセスしようとすると、NullReferenceException(ヌル参照例外)というエラーが発生します。

しかし、null条件演算子を使えば、そのエラーを回避できるので、プログラムが落ちる心配が少なくなります

2. null条件演算子の基本的な使い方

2. null条件演算子の基本的な使い方
2. null条件演算子の基本的な使い方

次の例では、PersonクラスのNameプロパティにアクセスしています。


class Person
{
    public string Name { get; set; }
}

Person person = null;
Console.WriteLine(person?.Name);

このコードでは、personがnullであるため、person.Nameと書いてしまうとエラーになります。

しかし、person?.Nameと書くことで、personがnullかどうかをチェックし、nullでなければNameにアクセスし、nullであればそのままnullを返します



3. null条件演算子の応用:メソッドの呼び出し

3. null条件演算子の応用:メソッドの呼び出し
3. null条件演算子の応用:メソッドの呼び出し

null条件演算子は、プロパティだけでなく、メソッドの呼び出しにも使えます


class Logger
{
    public void Log(string message)
    {
        Console.WriteLine("ログ: " + message);
    }
}

Logger logger = null;
logger?.Log("処理を開始します。");

この例では、loggerがnullであるため、Logメソッドを直接呼ぶとエラーになります。しかしlogger?.Log("...")と書けば、nullかどうかを判断してから実行するため、エラーにならずにスキップされます。

4. null条件演算子の注意点

4. null条件演算子の注意点
4. null条件演算子の注意点

null条件演算子はとても便利ですが、注意点もあります。例えば、結果がnullになる可能性があるため、値をそのまま使おうとすると別の問題が起きることがあります。


int? length = person?.Name.Length;

この場合、lengthint?(nullable int型)になり、nullか整数値かのどちらかになります。そのため、length.Valueのようにして取り出す前に、nullチェックをする必要があります。

5. null条件演算子と配列・リストのアクセス

5. null条件演算子と配列・リストのアクセス
5. null条件演算子と配列・リストのアクセス

配列やリストにアクセスする時にも、null条件演算子を活用できます。


List<string> words = null;
int? count = words?.Count;

wordsがnullの場合でも、words?.Countと書けばエラーにはならず、countにはnullが入ります。これにより、nullかどうかを先に確認する処理を書く必要がなくなるため、コードがすっきりします。

6. null条件演算子の内部的な動作とは?

6. null条件演算子の内部的な動作とは?
6. null条件演算子の内部的な動作とは?

裏側では、?.は次のようなif文に書き換えた処理と同じことをしています。


if (person != null)
{
    Console.WriteLine(person.Name);
}

このようなコードをいちいち毎回書かなくても、?.を使うだけで同じ動作ができます。可読性(読みやすさ)や保守性(メンテナンスのしやすさ)が向上します。

7. null条件演算子とnull合体演算子の組み合わせ

7. null条件演算子とnull合体演算子の組み合わせ
7. null条件演算子とnull合体演算子の組み合わせ

null条件演算子と一緒によく使われるのが、null合体演算子(??)です。これは、値がnullのときに、代わりのデフォルト値を設定することができます。


string name = person?.Name ?? "未登録";
Console.WriteLine(name);

この例では、person?.Nameがnullだった場合に"未登録"という文字列が代わりに代入されます。

カテゴリの一覧へ
新着記事
C#でタイムスタンプの精度を上げるためのテクニックを徹底解説!(初心者向け)
C#のコーディング規約(C# Coding Conventions)とは?読みやすいコードを書くための基本ルール
C#のデストラクタ(ファイナライザ)の使い方と注意点をやさしく解説!
COBOL資産のバージョン管理とは?初心者でもわかる保守と管理の基本
人気記事
No.1
Java&Spring記事人気No1
COBOLで学ぶSELECT文のORDER BY・GROUP BY活用法!初心者でもわかるデータ集計
No.2
Java&Spring記事人気No2
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.3
Java&Spring記事人気No3
COBOLのCOPY句の使い方を完全ガイド!初心者でもわかる共通部品の再利用方法
No.4
Java&Spring記事人気No4
COBOLで学ぶカーソル操作と複数行データ取得の基本
No.5
Java&Spring記事人気No5
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.6
Java&Spring記事人気No6
C#の日付型(DateTime)と基本的な使い方を解説|初心者向け入門ガイド
No.7
Java&Spring記事人気No7
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方
No.8
Java&Spring記事人気No8
C#の数値型をマスターしよう!int・double・decimalの違いと使い方