C#で文字列が空白か判定する方法|IsNullOrWhiteSpace・空文字・nullの違い

はじめに

C#で文字列を扱うとき、「入力された値が空白かどうか」を判定したい場面はよくあります。

たとえば、ユーザー名、検索キーワード、メールアドレス、備考欄などの入力値が、実際には何も入力されていない状態なのか、それとも有効な文字列なのかを確認する処理です。

C#では、文字列が空白かどうかを判定する代表的な方法として、次のようなものがあります。

C#
string.IsNullOrWhiteSpace(value)
string.IsNullOrEmpty(value)
value.Trim()

特に、string.IsNullOrWhiteSpaceは、null、空文字、スペース、タブ、改行などをまとめて判定できるため、入力チェックではよく使われます。

この記事では、C#で文字列が空白か判定する方法について、IsNullOrWhiteSpaceIsNullOrEmptyTrimの違いをサンプルコード付きで解説します。

1. C#で文字列が空白か判定する基本

1-1. 「空白」とは何を指すのか

C#で文字列の「空白」を判定するときは、まず「空白」という言葉が何を指しているのかを整理する必要があります。

一般的に、文字列の空白には次のような状態があります。

C#
string value1 = null;
string value2 = "";
string value3 = " ";
string value4 = " ";
string value5 = "\t";
string value6 = "\n";

それぞれ意味が異なります。

nullは、文字列オブジェクト自体が存在しない状態です。

""は、文字数が0の空文字です。

" "は、半角スペースが1文字入っている文字列です。

" "は、全角スペースが1文字入っている文字列です。

"\t"はタブ、"\n"は改行を表します。

見た目上は何も入力されていないように見えても、実際にはスペースや改行が入っている場合があります。そのため、C#でstringの空白判定を行うときは、どこまでを「空」とみなすかが重要です。

1-2. null・空文字・空白文字の違い

C#の文字列判定では、null、空文字、空白文字を区別して考える必要があります。

C#
string a = null;   // 値が存在しない
string b = ""; // 文字数が0
string c = " "; // 半角スペースが1文字ある

nullは、変数が文字列インスタンスを参照していない状態です。そのため、a.Lengthのようにアクセスすると、NullReferenceExceptionが発生します。

C#
string a = null;

// 例外が発生する
Console.WriteLine(a.Length);

一方、空文字""は文字列オブジェクトとして存在していますが、長さが0です。

C#
string b = "";

Console.WriteLine(b.Length); // 0

スペースだけの文字列" "は、見た目では空に見えることがありますが、文字数は1です。

C#
string c = " ";

Console.WriteLine(c.Length); // 1

この違いを理解しておくと、IsNullOrWhiteSpaceIsNullOrEmptyの使い分けがわかりやすくなります。

1-3. C#で空白判定が必要になる主な場面

C#で文字列の空白判定が必要になる場面は多くあります。

代表的な例は、入力フォームのバリデーションです。

C#
string userName = " ";

if (string.IsNullOrWhiteSpace(userName))
{
Console.WriteLine("ユーザー名を入力してください。");
}

このように判定しておくと、何も入力されていない場合だけでなく、スペースだけが入力された場合もエラーにできます。

ほかにも、次のような場面で空白チェックが使われます。

C#
// 検索キーワードが空なら検索しない
if (string.IsNullOrWhiteSpace(keyword))
{
return;
}

// 設定値が未指定ならデフォルト値を使う
if (string.IsNullOrWhiteSpace(configValue))
{
configValue = "default";
}

// CSVやテキストファイルの空行を無視する
if (string.IsNullOrWhiteSpace(line))
{
continue;
}

C#でstringを扱う処理では、空白判定を適切に行うことで、不要なエラーや意図しない処理を防げます。

2. IsNullOrWhiteSpaceで文字列が空白か判定する方法

2-1. IsNullOrWhiteSpaceの基本構文

C#で文字列がnull、空文字、空白文字だけで構成されているかを判定するには、string.IsNullOrWhiteSpaceを使います。

基本構文は次のとおりです。

C#
string.IsNullOrWhiteSpace(判定したい文字列)

戻り値はbool型です。

文字列がnull、空文字、または空白文字だけの場合はtrueを返します。

それ以外の場合はfalseを返します。

C#
string value = " ";

if (string.IsNullOrWhiteSpace(value))
{
Console.WriteLine("空白です");
}
else
{
Console.WriteLine("空白ではありません");
}

IsNullOrWhiteSpaceは、C#で文字列の入力チェックを行うときに最も使いやすいメソッドのひとつです。

2-2. null・空文字・スペースを判定するサンプルコード

次のコードでは、null、空文字、半角スペース、通常の文字列を判定しています。

C#
string value1 = null;
string value2 = "";
string value3 = " ";
string value4 = "abc";

Console.WriteLine(string.IsNullOrWhiteSpace(value1)); // True
Console.WriteLine(string.IsNullOrWhiteSpace(value2)); // True
Console.WriteLine(string.IsNullOrWhiteSpace(value3)); // True
Console.WriteLine(string.IsNullOrWhiteSpace(value4)); // False

IsNullOrWhiteSpaceでは、nullも空文字もスペースだけの文字列もtrueになります。

そのため、次のような入力チェックに向いています。

C#
string name = "   ";

if (string.IsNullOrWhiteSpace(name))
{
Console.WriteLine("名前が入力されていません。");
}

この場合、nameには半角スペースが複数入っていますが、実質的には未入力とみなせます。

2-3. タブや改行を含む文字列の判定結果

IsNullOrWhiteSpaceは、半角スペースだけでなく、タブや改行などの空白文字も判定できます。

C#
string tab = "\t";
string newLine = "\n";
string spaces = " \t\n";

Console.WriteLine(string.IsNullOrWhiteSpace(tab)); // True
Console.WriteLine(string.IsNullOrWhiteSpace(newLine)); // True
Console.WriteLine(string.IsNullOrWhiteSpace(spaces)); // True

タブや改行は画面上では見えにくいため、通常の目視では気づきにくい文字です。

たとえば、テキストエリアの入力やファイル読み込みでは、改行だけの行が含まれることがあります。

C#
string line = "\r\n";

if (string.IsNullOrWhiteSpace(line))
{
Console.WriteLine("空行です。");
}

このような場合でも、IsNullOrWhiteSpaceを使えば簡単に空白行として判定できます。

2-4. IsNullOrWhiteSpaceを使うべきケース

IsNullOrWhiteSpaceを使うべきケースは、文字列が実質的に未入力かどうかを判定したい場合です。

特に、次のような処理ではIsNullOrWhiteSpaceが適しています。

C#
if (string.IsNullOrWhiteSpace(input))
{
Console.WriteLine("入力してください。");
}

ユーザーが何も入力していない場合だけでなく、スペースだけを入力した場合もエラーにしたいなら、IsNullOrWhiteSpaceを使うのが自然です。

たとえば、ログインIDや名前の入力欄では、スペースだけの値を有効な入力として扱うべきではありません。

C#
string userId = "   ";

if (string.IsNullOrWhiteSpace(userId))
{
Console.WriteLine("ユーザーIDは必須です。");
}

このように、C#でstringの空白判定を行う多くの場面では、まずIsNullOrWhiteSpaceを候補にするとよいでしょう。

3. IsNullOrEmptyで空文字・nullを判定する方法

3-1. IsNullOrEmptyの基本構文

string.IsNullOrEmptyは、文字列がnullまたは空文字かどうかを判定するメソッドです。

基本構文は次のとおりです。

C#
string.IsNullOrEmpty(判定したい文字列)

nullまたは""の場合はtrueを返します。

C#
string value = "";

if (string.IsNullOrEmpty(value))
{
Console.WriteLine("nullまたは空文字です");
}

IsNullOrEmptyは、空白文字までは空として扱いません。

つまり、半角スペースだけの文字列" "falseになります。

3-2. IsNullOrEmptyで判定できる文字列

IsNullOrEmptyで判定できるのは、主に次の2つです。

C#
string value1 = null;
string value2 = "";
string value3 = " ";
string value4 = "abc";

Console.WriteLine(string.IsNullOrEmpty(value1)); // True
Console.WriteLine(string.IsNullOrEmpty(value2)); // True
Console.WriteLine(string.IsNullOrEmpty(value3)); // False
Console.WriteLine(string.IsNullOrEmpty(value4)); // False

value1nullなのでtrueです。

value2は空文字なのでtrueです。

しかし、value3は半角スペースが1文字入っているため、空文字ではありません。そのためfalseになります。

3-3. スペースだけの文字列がtrueにならない理由

IsNullOrEmptyでスペースだけの文字列がtrueにならない理由は、スペースも1つの文字だからです。

C#
string value = " ";

Console.WriteLine(value.Length); // 1
Console.WriteLine(string.IsNullOrEmpty(value)); // False

空文字""の長さは0ですが、半角スペース" "の長さは1です。

C#
string empty = "";
string space = " ";

Console.WriteLine(empty.Length); // 0
Console.WriteLine(space.Length); // 1

そのため、IsNullOrEmptyはスペースだけの文字列を空とはみなしません。

入力フォームなどで、スペースだけの入力も未入力として扱いたい場合は、IsNullOrEmptyではなくIsNullOrWhiteSpaceを使う方が適しています。

3-4. IsNullOrWhiteSpaceとの違い

IsNullOrEmptyIsNullOrWhiteSpaceの違いは、空白文字だけの文字列をtrueにするかどうかです。

C#
string value = " ";

Console.WriteLine(string.IsNullOrEmpty(value)); // False
Console.WriteLine(string.IsNullOrWhiteSpace(value)); // True

IsNullOrEmptyは、nullまたは空文字だけを判定します。

IsNullOrWhiteSpaceは、null、空文字、半角スペース、全角スペース、タブ、改行などを判定します。

実用上は、次のように使い分けるとわかりやすいです。

C#
// nullまたは空文字だけをチェックしたい
string.IsNullOrEmpty(value);

// スペースや改行だけの文字列も空として扱いたい
string.IsNullOrWhiteSpace(value);

ユーザー入力の必須チェックでは、IsNullOrWhiteSpaceを使うケースが多いです。

一方で、スペースを有効な文字として扱いたい特殊な仕様では、IsNullOrEmptyを使うこともあります。

4. null・空文字・空白文字の判定結果を比較

4-1. nullの場合の判定結果

nullの場合、IsNullOrEmptyIsNullOrWhiteSpacetrueになります。

C#
string value = null;

Console.WriteLine(string.IsNullOrEmpty(value)); // True
Console.WriteLine(string.IsNullOrWhiteSpace(value)); // True

どちらのメソッドもnullを安全に判定できます。

そのため、次のように書いてもNullReferenceExceptionは発生しません。

C#
string value = null;

if (string.IsNullOrWhiteSpace(value))
{
Console.WriteLine("値がありません。");
}

一方で、value.Trim()のようにインスタンスメソッドを呼び出すと、valuenullの場合に例外が発生します。

C#
string value = null;

// NullReferenceException
string result = value.Trim();

nullの可能性がある文字列では、まずIsNullOrWhiteSpaceなどで判定すると安全です。

4-2. 空文字「""」の場合の判定結果

空文字""の場合も、IsNullOrEmptyIsNullOrWhiteSpaceはどちらもtrueになります。

C#
string value = "";

Console.WriteLine(string.IsNullOrEmpty(value)); // True
Console.WriteLine(string.IsNullOrWhiteSpace(value)); // True

空文字は、文字数が0の文字列です。

C#
string value = "";

Console.WriteLine(value.Length); // 0

空文字はnullとは違い、文字列オブジェクトとしては存在しています。

ただし、入力値としては未入力とみなすことが多いため、どちらのメソッドでもtrueになります。

4-3. 半角スペース・全角スペースの場合の判定結果

半角スペースだけの文字列では、IsNullOrEmptyfalseIsNullOrWhiteSpacetrueになります。

C#
string halfSpace = " ";

Console.WriteLine(string.IsNullOrEmpty(halfSpace)); // False
Console.WriteLine(string.IsNullOrWhiteSpace(halfSpace)); // True

全角スペースだけの文字列も、IsNullOrWhiteSpaceでは空白として判定されます。

C#
string fullSpace = " ";

Console.WriteLine(string.IsNullOrEmpty(fullSpace)); // False
Console.WriteLine(string.IsNullOrWhiteSpace(fullSpace)); // True

半角スペースも全角スペースも、文字としては存在しています。

そのため、IsNullOrEmptyではfalseになります。

しかし、どちらも空白文字として扱われるため、IsNullOrWhiteSpaceではtrueになります。

4-4. タブ・改行の場合の判定結果

タブや改行だけの文字列も、IsNullOrWhiteSpaceではtrueになります。

C#
string tab = "\t";
string lineFeed = "\n";
string carriageReturn = "\r\n";

Console.WriteLine(string.IsNullOrWhiteSpace(tab)); // True
Console.WriteLine(string.IsNullOrWhiteSpace(lineFeed)); // True
Console.WriteLine(string.IsNullOrWhiteSpace(carriageReturn)); // True

一方、IsNullOrEmptyではfalseになります。

C#
string tab = "\t";

Console.WriteLine(string.IsNullOrEmpty(tab)); // False
Console.WriteLine(string.IsNullOrWhiteSpace(tab)); // True

タブや改行も文字として存在しているため、空文字ではありません。

ファイル読み込みや複数行テキストの処理では、タブや改行だけの文字列が含まれることがあります。そのような場合には、IsNullOrWhiteSpaceを使うと便利です。

4-5. 比較表で見る判定メソッドの違い

IsNullOrEmptyIsNullOrWhiteSpaceの判定結果を表にまとめると、次のようになります。

文字列内容IsNullOrEmptyIsNullOrWhiteSpace
null値が存在しないtruetrue
""空文字truetrue
" "半角スペースfalsetrue
" "全角スペースfalsetrue
"\t"タブfalsetrue
"\n"改行falsetrue
"abc"通常の文字列falsefalse
" abc "前後に空白がある文字列falsefalse

最後の" abc "は、前後に空白がありますが、空白以外の文字abcが含まれているため、IsNullOrWhiteSpaceでもfalseになります。

つまり、IsNullOrWhiteSpaceは「文字列全体が空白だけかどうか」を判定するメソッドです。

5. Trimを使って空白を除去してから判定する方法

5-1. Trimで前後の空白を削除する

Trimは、文字列の前後にある空白文字を削除するメソッドです。

C#
string value = "  abc  ";

string result = value.Trim();

Console.WriteLine(result); // abc

Trimは、文字列の前後にある空白を削除します。

ただし、文字列の途中にある空白は削除されません。

C#
string value = "  a b c  ";

string result = value.Trim();

Console.WriteLine(result); // a b c

前後の空白だけを取り除きたい場合に便利です。

ユーザー入力値を保存する前に、余分なスペースを除去したい場合などに使われます。

5-2. Trim後に空文字か判定するサンプルコード

Trimを使って前後の空白を削除してから、空文字かどうかを判定することもできます。

C#
string value = "   ";

if (value.Trim() == "")
{
Console.WriteLine("空白です。");
}

このコードでは、valueが半角スペースだけなので、Trim()後に空文字になります。

C#
string value = "   ";

Console.WriteLine(value.Trim()); // 空文字
Console.WriteLine(value.Trim() == ""); // True

ただし、valuenullの場合は注意が必要です。

C#
string value = null;

// NullReferenceException
if (value.Trim() == "")
{
Console.WriteLine("空白です。");
}

Trimを使う場合は、nullチェックを先に行う必要があります。

C#
string value = null;

if (value == null || value.Trim() == "")
{
Console.WriteLine("nullまたは空白です。");
}

このように書けば、nullでも例外を防げます。

ただし、単純に空白判定をしたいだけなら、次のように書く方が簡潔です。

C#
if (string.IsNullOrWhiteSpace(value))
{
Console.WriteLine("nullまたは空白です。");
}

5-3. TrimとIsNullOrWhiteSpaceの使い分け

TrimIsNullOrWhiteSpaceは目的が異なります。

Trimは、文字列の前後の空白を削除するためのメソッドです。

IsNullOrWhiteSpaceは、文字列が空白かどうかを判定するためのメソッドです。

たとえば、入力値が空白かどうかだけを判定したい場合は、IsNullOrWhiteSpaceを使います。

C#
if (string.IsNullOrWhiteSpace(input))
{
Console.WriteLine("入力してください。");
}

一方、入力値の前後の空白を削除してから保存したい場合は、Trimを使います。

C#
string input = "  Tanaka  ";

string normalized = input.Trim();

Console.WriteLine(normalized); // Tanaka

両方を組み合わせることもあります。

C#
string input = "  Tanaka  ";

if (!string.IsNullOrWhiteSpace(input))
{
string name = input.Trim();
Console.WriteLine(name);
}

このコードでは、まず入力値が空白だけでないことを確認し、その後で前後の空白を削除しています。

5-4. nullに対してTrimを使う際の注意点

Trimはインスタンスメソッドなので、nullに対して呼び出すことはできません。

C#
string value = null;

string result = value.Trim(); // NullReferenceException

nullの可能性がある文字列でTrimを使う場合は、事前にnullチェックを行います。

C#
string value = null;

if (value != null)
{
string result = value.Trim();
Console.WriteLine(result);
}

または、null条件演算子を使う方法もあります。

C#
string value = null;

string result = value?.Trim();

Console.WriteLine(result == null); // True

value?.Trim()は、valuenullの場合にTrimを呼び出さず、結果もnullになります。

空白判定まで行いたい場合は、次のように書けます。

C#
string value = null;

if (string.IsNullOrEmpty(value?.Trim()))
{
Console.WriteLine("nullまたは空白です。");
}

ただし、この書き方よりも、単純に次のように書いた方が読みやすいです。

C#
if (string.IsNullOrWhiteSpace(value))
{
Console.WriteLine("nullまたは空白です。");
}

空白判定だけが目的であれば、TrimよりもIsNullOrWhiteSpaceを優先するとよいでしょう。

6. 条件分岐で文字列の空白チェックを実装する例

6-1. if文で空白の場合に処理を分ける

C#で文字列が空白かどうかを判定し、処理を分ける基本的な書き方は次のとおりです。

C#
string input = " ";

if (string.IsNullOrWhiteSpace(input))
{
Console.WriteLine("空白です。");
}
else
{
Console.WriteLine("空白ではありません。");
}

inputnull、空文字、スペースだけ、タブだけ、改行だけの場合はtrueになります。

実際のアプリケーションでは、次のようにエラーメッセージを表示することが多いです。

C#
string userName = " ";

if (string.IsNullOrWhiteSpace(userName))
{
Console.WriteLine("ユーザー名を入力してください。");
}
else
{
Console.WriteLine($"ユーザー名: {userName}");
}

このように、if文とIsNullOrWhiteSpaceを組み合わせることで、シンプルに空白チェックを実装できます。

6-2. 空白でない場合だけ処理を実行する

空白ではない場合だけ処理を実行したいときは、否定演算子!を使います。

C#
string input = "C#";

if (!string.IsNullOrWhiteSpace(input))
{
Console.WriteLine("入力値を処理します。");
}

!string.IsNullOrWhiteSpace(input)は、「inputがnullでも空文字でも空白だけでもない場合」という意味です。

たとえば、検索キーワードが入力されている場合だけ検索するなら、次のように書けます。

C#
string keyword = "C# string 空白";

if (!string.IsNullOrWhiteSpace(keyword))
{
Console.WriteLine($"検索します: {keyword}");
}

空白の場合に早期リターンする書き方もよく使われます。

C#
void Search(string keyword)
{
if (string.IsNullOrWhiteSpace(keyword))
{
Console.WriteLine("検索キーワードが空です。");
return;
}

Console.WriteLine($"検索処理を実行します: {keyword}");
}

このように、先に空白チェックをして処理を中断すると、後続のコードが読みやすくなります。

6-3. ユーザー入力値のバリデーション例

入力フォームのバリデーションでは、スペースだけの入力を未入力として扱うことが多いです。

そのため、IsNullOrWhiteSpaceを使うのが適しています。

C#
string name = " ";
string email = "test@example.com";

if (string.IsNullOrWhiteSpace(name))
{
Console.WriteLine("名前は必須です。");
}

if (string.IsNullOrWhiteSpace(email))
{
Console.WriteLine("メールアドレスは必須です。");
}

複数の入力値をチェックする場合は、次のように書けます。

C#
string userName = "Tanaka";
string password = " ";
string displayName = "";

if (string.IsNullOrWhiteSpace(userName))
{
Console.WriteLine("ユーザー名を入力してください。");
}

if (string.IsNullOrWhiteSpace(password))
{
Console.WriteLine("パスワードを入力してください。");
}

if (string.IsNullOrWhiteSpace(displayName))
{
Console.WriteLine("表示名を入力してください。");
}

入力値を保存する前にTrimで前後の空白を削除したい場合は、空白チェック後に処理します。

C#
string name = "  Tanaka  ";

if (string.IsNullOrWhiteSpace(name))
{
Console.WriteLine("名前を入力してください。");
}
else
{
name = name.Trim();
Console.WriteLine($"登録名: {name}");
}

これにより、未入力チェックと余分な空白の除去を両方実現できます。

6-4. メソッド化して再利用する方法

同じ空白チェックを複数箇所で使う場合は、メソッド化すると便利です。

C#
static bool IsBlank(string value)
{
return string.IsNullOrWhiteSpace(value);
}

使い方は次のとおりです。

C#
string input = " ";

if (IsBlank(input))
{
Console.WriteLine("空白です。");
}

入力値が必須かどうかをチェックするメソッドとして作ることもできます。

C#
static bool IsRequiredValid(string value)
{
return !string.IsNullOrWhiteSpace(value);
}

使用例です。

C#
string name = "Yamada";

if (IsRequiredValid(name))
{
Console.WriteLine("入力されています。");
}
else
{
Console.WriteLine("入力してください。");
}

ただし、単純な判定だけであれば、無理に独自メソッドを作らず、string.IsNullOrWhiteSpaceを直接使っても問題ありません。

プロジェクト全体で「空白」の扱いを統一したい場合には、共通メソッドとして定義しておくと保守しやすくなります。

7. C#で空白判定するときの注意点

7-1. 半角スペースと全角スペースの扱い

C#で空白判定を行うときは、半角スペースと全角スペースの扱いに注意しましょう。

日本語の入力では、全角スペースが入力されることがあります。

C#
string value = " ";

Console.WriteLine(string.IsNullOrWhiteSpace(value)); // True

IsNullOrWhiteSpaceを使えば、全角スペースだけの文字列も空白として判定できます。

一方、IsNullOrEmptyでは全角スペースは空文字ではないため、falseになります。

C#
string value = " ";

Console.WriteLine(string.IsNullOrEmpty(value)); // False
Console.WriteLine(string.IsNullOrWhiteSpace(value)); // True

ユーザー入力で全角スペースだけを未入力として扱いたい場合は、IsNullOrWhiteSpaceを使うのが安全です。

7-2. タブ・改行など見えない空白文字

文字列には、半角スペースや全角スペース以外にも、タブや改行などの見えない空白文字が含まれることがあります。

C#
string value = "\t\n";

Console.WriteLine(string.IsNullOrWhiteSpace(value)); // True

特に、ファイル読み込み、コピー&ペースト、複数行入力では、タブや改行だけの文字列が発生することがあります。

C#
string text = "\r\n";

if (string.IsNullOrWhiteSpace(text))
{
Console.WriteLine("実質的に空です。");
}

見た目では空に見えない場合でも、内部的には空白文字が入っていることがあります。

C#でstringの空白判定を確実に行いたい場合は、IsNullOrWhiteSpaceを使うと多くのケースに対応できます。

7-3. null参照例外を避ける書き方

C#で文字列を扱うときに注意したいのが、NullReferenceExceptionです。

次のコードは、valuenullの場合に例外が発生します。

C#
string value = null;

if (value.Trim() == "")
{
Console.WriteLine("空白です。");
}

Trimは文字列インスタンスに対して呼び出すメソッドなので、nullには使えません。

安全に判定するには、string.IsNullOrWhiteSpaceを使います。

C#
string value = null;

if (string.IsNullOrWhiteSpace(value))
{
Console.WriteLine("空白です。");
}

また、どうしてもTrimを使いたい場合は、先にnullチェックを行います。

C#
string value = null;

if (value == null || value.Trim() == "")
{
Console.WriteLine("空白です。");
}

C#で空白判定を書くときは、nullが渡される可能性を考えておくことが重要です。

7-4. .NETのバージョンによる利用可否

string.IsNullOrWhiteSpaceは、古い.NET環境では利用できない場合があります。

現在の.NETや.NET Framework 4以降では利用できますが、古い環境を保守している場合は注意が必要です。

もしIsNullOrWhiteSpaceが使えない環境では、次のようにIsNullOrEmptyTrimを組み合わせて代用できます。

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

ただし、このコードではstring.IsNullOrEmpty(value)を先に判定しているため、valuenullでもTrim()は呼び出されません。

C#
string value = null;

Console.WriteLine(IsNullOrWhiteSpaceCompatible(value)); // True

新しい環境では、基本的に標準のstring.IsNullOrWhiteSpaceを使う方が簡潔で読みやすいです。

8. よくある質問

8-1. string.Emptyと""の違いはある?

string.Empty""は、どちらも空文字を表します。

C#
string value1 = string.Empty;
string value2 = "";

Console.WriteLine(value1 == value2); // True

実用上、大きな違いはありません。

どちらを使っても空文字として扱われます。

C#
Console.WriteLine(string.IsNullOrEmpty(string.Empty));      // True
Console.WriteLine(string.IsNullOrEmpty("")); // True
Console.WriteLine(string.IsNullOrWhiteSpace(string.Empty)); // True
Console.WriteLine(string.IsNullOrWhiteSpace("")); // True

コードの読みやすさやチームのコーディング規約に合わせて使い分けるとよいでしょう。

8-2. スペースだけの文字列を空とみなすには?

スペースだけの文字列を空とみなすには、string.IsNullOrWhiteSpaceを使います。

C#
string value = "   ";

if (string.IsNullOrWhiteSpace(value))
{
Console.WriteLine("空とみなします。");
}

IsNullOrEmptyでは、スペースだけの文字列はfalseになります。

C#
string value = "   ";

Console.WriteLine(string.IsNullOrEmpty(value)); // False
Console.WriteLine(string.IsNullOrWhiteSpace(value)); // True

ユーザー入力で「スペースだけ」を未入力として扱いたい場合は、IsNullOrWhiteSpaceを使うのが一般的です。

8-3. 全角スペースもIsNullOrWhiteSpaceで判定できる?

全角スペースだけの文字列も、IsNullOrWhiteSpaceで判定できます。

C#
string value = " ";

Console.WriteLine(string.IsNullOrWhiteSpace(value)); // True

日本語入力では、ユーザーが全角スペースを入力することがあります。

見た目では空欄に見えても、実際には全角スペースが入っている場合があります。

C#
string input = "  ";

if (string.IsNullOrWhiteSpace(input))
{
Console.WriteLine("全角スペースだけなので未入力です。");
}

そのため、日本語を扱うアプリケーションでも、空白判定にはIsNullOrWhiteSpaceが便利です。

8-4. 入力フォームの空白チェックにはどれを使うべき?

入力フォームの空白チェックには、基本的にstring.IsNullOrWhiteSpaceを使うのがおすすめです。

C#
if (string.IsNullOrWhiteSpace(input))
{
Console.WriteLine("入力してください。");
}

理由は、null、空文字、半角スペース、全角スペース、タブ、改行などをまとめて判定できるからです。

入力フォームでは、ユーザーがスペースだけを入力する可能性があります。

IsNullOrEmptyを使うと、スペースだけの文字列を有効な入力として扱ってしまいます。

C#
string input = " ";

Console.WriteLine(string.IsNullOrEmpty(input)); // False
Console.WriteLine(string.IsNullOrWhiteSpace(input)); // True

そのため、必須入力チェックではIsNullOrWhiteSpaceを使い、必要に応じてTrimで前後の空白を削除するとよいでしょう。

C#
string input = "  Suzuki  ";

if (string.IsNullOrWhiteSpace(input))
{
Console.WriteLine("入力してください。");
}
else
{
input = input.Trim();
Console.WriteLine($"入力値: {input}");
}

まとめ

C#で文字列が空白か判定するには、主にstring.IsNullOrWhiteSpacestring.IsNullOrEmptyTrimを使います。

string.IsNullOrWhiteSpaceは、null、空文字、半角スペース、全角スペース、タブ、改行などをまとめて判定できます。

C#
string.IsNullOrWhiteSpace(value)

入力フォームの必須チェックや、スペースだけの文字列を未入力として扱いたい場合に適しています。

string.IsNullOrEmptyは、nullまたは空文字だけを判定します。

C#
string.IsNullOrEmpty(value)

スペースだけの文字列はfalseになるため、空白文字も未入力として扱いたい場合には向いていません。

Trimは、文字列の前後の空白を削除するためのメソッドです。

C#
value.Trim()

空白を除去してから保存したい場合に使います。ただし、nullに対してTrimを呼び出すとNullReferenceExceptionが発生するため注意が必要です。

C#でstringの空白判定を行う場合、基本的には次のように考えるとわかりやすいです。

C#
// 入力値が実質的に空か判定したい
string.IsNullOrWhiteSpace(value);

// nullまたは空文字だけを判定したい
string.IsNullOrEmpty(value);

// 前後の空白を削除したい
value.Trim();

多くの入力チェックでは、IsNullOrWhiteSpaceを使うのがシンプルで安全です。null、空文字、空白文字の違いを理解して、用途に合った方法で文字列を判定しましょう。