閉じる

【C#】string.IsNullOrEmptyで空文字チェック!null判定や違いを解説

C#でアプリケーションを開発する際、文字列の扱いは避けては通れない非常に重要な要素です。

特に、変数の中身が「何もない」状態を適切に判定することは、プログラムのバグを防ぎ、堅牢なシステムを構築するための第一歩となります。

その中で最も頻繁に利用されるのがstring.IsNullOrEmptyメソッドです。

このメソッドを正しく理解し、使い分けることで、実行時エラーであるNullReferenceExceptionを未然に防ぐことができます。

本記事では、初心者から中級者までが活用できる、文字列チェックの決定版ガイドをお届けします。

string.IsNullOrEmptyとは何か

C#におけるstring.IsNullOrEmptyは、対象の文字列が「null(参照がない状態)」であるか、あるいは「””(空文字、長さが0の状態)」であるかを一括でチェックするための静的メソッドです。

基本的な役割と戻り値

このメソッドは、引数に渡された文字列を評価し、結果をbool型で返します。

具体的な挙動は以下の通りです。

  1. 変数がnullの場合:trueを返す
  2. 変数が""(空文字)の場合:trueを返す
  3. 変数が"Hello"などの1文字以上の文字列を含む場合:falseを返す
  4. 変数が" "(半角スペースのみ)の場合:falseを返す

ここで注意が必要なのは、「スペースやタブなどの空白文字」は空文字とは見なされないという点です。

これについては後述するIsNullOrWhiteSpaceとの違いで詳しく解説します。

なぜこのメソッドを使うのか

C#で文字列を扱う際、最も恐ろしいのがNullReferenceExceptionです。

例えば、変数がnullの状態でそのプロパティであるLengthを参照しようとすると、プログラムは即座にクラッシュします。

C#
string myText = null;

// nullに対してプロパティを参照しようとするとエラーになる
// int length = myText.Length; // ここでNullReferenceExceptionが発生

string.IsNullOrEmptyを使用すれば、内部で安全にnullチェックを行ってから空文字判定を行ってくれるため、安全かつ簡潔なコードを記述できるのです。

実際に動かして学ぶ基本コード

まずは、どのような入力に対してどのような結果が返ってくるのか、サンプルプログラムで確認してみましょう。

サンプルプログラムの作成

以下のコードは、様々なパターンの文字列をstring.IsNullOrEmptyで判定する例です。

C#
using System;

class Program
{
    static void Main()
    {
        // 判定対象の文字列をいくつか用意
        string str1 = null;             // null
        string str2 = "";               // 空文字
        string str3 = string.Empty;     // 空文字 ( "" と同じ)
        string str4 = " ";              // 半角スペース1つ
        string str5 = "C# Programming"; // 通常の文字列

        Console.WriteLine("--- string.IsNullOrEmpty の判定結果 ---");
        
        // nullの判定
        Console.WriteLine($"str1 (null): {string.IsNullOrEmpty(str1)}");
        
        // 空文字の判定
        Console.WriteLine($"str2 (\"\"): {string.IsNullOrEmpty(str2)}");
        
        // string.Emptyの判定
        Console.WriteLine($"str3 (string.Empty): {string.IsNullOrEmpty(str3)}");
        
        // 空白文字の判定
        Console.WriteLine($"str4 (\" \"): {string.IsNullOrEmpty(str4)}");
        
        // 通常の文字列の判定
        Console.WriteLine($"str5 (\"C# Programming\"): {string.IsNullOrEmpty(str5)}");
    }
}

実行結果の確認

上記のコードを実行すると、コンソールには以下のように表示されます。

実行結果
--- string.IsNullOrEmpty の判定結果 ---
str1 (null): True
str2 (""): True
str3 (string.Empty): True
str4 (" "): False
str5 ("C# Programming"): False

実行結果からわかる通り、null""string.Emptyの3つはすべてTrueと判定されています。

一方で、半角スペースが含まれている場合は「空ではない」と判断されFalseが返っています。

「null」と「空文字」の決定的な違い

プログラム初心者にとって混同しやすいのが「null」と「空文字(””)」の違いです。

これらはどちらも「値がない」ように見えますが、コンピュータのメモリ上では全く異なる状態を指しています。

メモリ上の状態

  • null(参照なし)変数がオブジェクトのアドレスを保持していない状態です。リモコン(変数)はあるが、操作するテレビ(実体)がどこにも存在しない状態に例えられます。
  • 空文字(”” / string.Empty)メモリ上に「長さ0の文字列」という実体(インスタンス)が存在し、変数がその場所を指している状態です。テレビはあるが、番組が何も映っていない状態に例えられます。

string.IsNullOrEmptyは、これら「リモコンがない状態」と「中身が空のテレビがある状態」の両方を検知してくれる便利なツールなのです。

IsNullOrEmpty と IsNullOrWhiteSpace の違い

C#には、string.IsNullOrEmptyとよく似たstring.IsNullOrWhiteSpaceというメソッドがあります。

実務ではこちらの方が多用されることも少なくありません。

判定基準の比較

この2つのメソッドの最大の違いは、「空白文字(スペース、タブ、改行など)をどう扱うか」にあります。

入力値IsNullOrEmptyIsNullOrWhiteSpace
nullTrueTrue
""TrueTrue
" " (半角スペース)FalseTrue
"\n" (改行文字)FalseTrue
"A"FalseFalse

どちらを使うべきか?

使い分けのポイントは、「ユーザーが入力したスペースを有効なデータとして認めるか」です。

IsNullOrEmpty

データの長さを厳密に管理したい場合や、バイナリデータ的な扱いをする文字列の場合。

ただし、現代のWebフォームや業務システム開発では、スペースのみの入力を「未入力」とみなしたいことが多いため、出番は限定的かもしれません。

IsNullOrWhiteSpace

ユーザー登録の「名前」や「コメント」などのバリデーションです。

スペースキーを連打しただけの入力を「入力済み」と判定したくない場合に最適です。

C# 9.0以降の新しい書き方(パターンマッチング)

近年のC#(バージョン9.0以降)では、string.IsNullOrEmptyを使わずに、パターンマッチングを用いて同様のチェックを行う記述が普及しています。

Is null or “” 構文

直感的で読みやすいコードとして、以下のような書き方が可能です。

C#
string input = GetUserInput();

// 従来の書き方
if (string.IsNullOrEmpty(input))
{
    // 処理
}

// C# 9.0以降のパターンマッチング
if (input is null or "")
{
    // null または 空文字 の場合の処理
    Console.WriteLine("入力がありません。");
}

この書き方のメリットは、「文章のように読めること」です。

また、静的メソッドを呼び出す形式よりも意図が明確になるため、最新のプロジェクトではこちらが推奨されることもあります。

否定の判定

逆に「値が入っていること」を確認したい場合は、notキーワードを組み合わせます。

C#
// 値が入っている(nullでも空文字でもない)ことを確認
if (input is not (null or ""))
{
    Console.WriteLine($"入力された値は {input} です。");
}

非常に強力で可読性が高い方法ですが、プロジェクトのコーディング規約に合わせて、従来のメソッド呼び出しと使い分けるようにしましょう。

実践的な活用シーン

実際に開発現場でどのようにこれらのチェックが使われるのか、具体的なシナリオを見てみましょう。

1. ユーザー入力のバリデーション

Webフォームやデスクトップアプリで、必須項目が入力されているかをチェックする例です。

C#
public void RegisterUser(string userName)
{
    // スペースのみの入力も許さないため、IsNullOrWhiteSpaceを使用
    if (string.IsNullOrWhiteSpace(userName))
    {
        throw new ArgumentException("ユーザー名は必須入力です。スペースのみの登録もできません。");
    }

    // 登録処理...
    Console.WriteLine($"{userName} を登録しました。");
}

2. 外部APIやデータベースからの取得値チェック

外部システムから取得したデータがnullである可能性を考慮し、安全にデフォルト値を割り当てる処理です。

C#
string apiResult = FetchDataFromExternalApi();

// データが取得できなかった場合は「不明」として扱う
string displayName = string.IsNullOrEmpty(apiResult) ? "不明なユーザー" : apiResult;

Console.WriteLine($"表示名: {displayName}");

パフォーマンスについての考察

大量の文字列をループ内で処理する場合、パフォーマンスが気になるかもしれません。

string.IsNullOrEmptyの中身は、非常にシンプルに実装されています。

内部的な実装(イメージ)

実際の.NETのソースコードでも、概ね以下のような構造になっています。

C#
public static bool IsNullOrEmpty(string value)
{
    return value == null || value.Length == 0;
}

このメソッド自体は、非常に高速です。

インライン化(関数の呼び出しオーバーヘッドをなくす最適化)も行われるため、自分で s == null || s.Length == 0 と書くのと速度差はほぼありません。

むしろ、可読性と安全性の観点から、標準メソッドを使用することが推奨されます。

まとめ

C#におけるstring.IsNullOrEmptyは、文字列の安全性を確保するための最も基本的かつ重要な道具です。

本記事で解説したポイントを振り返りましょう。

  • null空文字(””)の両方を一度にチェックできる。
  • NullReferenceExceptionを防ぐために必須の習慣である。
  • スペースや改行も含めて「空」とみなしたい場合はstring.IsNullOrWhiteSpaceを使用する。
  • C# 9.0以降ならis null or ""という直感的な書き方も選べる。

文字列の状態を正しく判定することは、ユーザーにとって使いやすく、開発者にとってメンテナンスしやすい「壊れにくいプログラム」を作る第一歩です。

まずはIsNullOrEmptyを使いこなし、状況に応じてIsNullOrWhiteSpaceやパターンマッチングを組み合わせてみてください。

基本操作

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!