.NET TIPS

C#でnullチェックを簡潔に行うには?

デジタルアドバンテージ 遠藤 孝信
2010/03/18

 「変数の内容がnullだったら、×××」というのは、プログラミングでは頻繁に必要となる処理だが、C#では「null合体演算子」(null coalescing operator、coalesceは「合体する」という意味の動詞)を使うと、そのような処理を簡潔に記述できる場合がある。

 例えば次のコードは、何らかの処理を行った後、変数descriptionの内容がnullだったら、とりあえず変数titleの内容をコピーしておくという処理だ。

using System;

class Program {

  static void Main() {

    string title = "今日の出来事";
    string description = null;

    // ……何らかの処理……

    if (description == null) {
      description = title;
    }

    Console.WriteLine(description); // 出力:タイトル
  }
}
if文を使ったnullチェックの例

 このコード内のif文は、null合体演算子を使えば、次のように簡潔に記述できる。null合体演算子は、クエスチョン・マーク(はてなマーク)を2つ並べて「??」と記述する

using System;

class Program {

  static void Main() {

    string title = "タイトル";
    string description = null;

    // ……何らかの処理……

    // if (description == null) {
    //   description = title;
    // }
    // と↓は同じ

    description = description ?? title; // 「??」はnull合体演算子

    Console.WriteLine(description); // 出力:タイトル
  }
}
null合体演算子「??」の利用例(1)

 「description ?? title」は、変数descriptionがnullであれば変数titleを返し、nullでなければ変数descriptionを返す。

「??」の利用例

 別の例を見てみよう。

 次のコードのSampleクラスのTitleBitmapプロパティは、特定のビットマップを返すプロパティだが、メモリを効率的に利用するために、プロパティにアクセスされたときに初めてビットマップを読み込む。これは遅延ロードと呼ばれるパターンの一種だ。

using System.Drawing;

public class Sample {

  Bitmap myBitmap = null;

  // TitleBitmapプロパティ
  public Bitmap TitleBitmap {
    get {
      // 必要になったときに初めて画像を読み込む
      return myBitmap ?? (myBitmap = new Bitmap("title.jpg"));
    }
  }
}

class Program {
  static void Main() {
    Sample s = new Sample();
    Bitmap bitmap = s.TitleBitmap;
  }
}
null合体演算子「??」の利用例(2)
変数myBitmapがnullであれば、画像を読み込む。

  では、変数myBitmapがnullであれば画像を読み込み、それをmyBitmapに代入する(さらにその値がプロパティの戻り値となる)。myBitmapがnullでなければ、すでに画像は読み込み済みなので、単にそれを返すだけだ。End of Article

利用可能バージョン:.NET Framework 2.0以降
カテゴリ:C# 処理対象:演算子

この記事と関連性の高い別の.NET TIPS
文字列がnull(Nothing)か空文字列かを簡単に判定するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH