- C#でnull・空文字・空白を判定する方法
- まず「null・空文字・空白」の違いを理解する
- 3つの状態を表で整理する
- string.IsNullOrEmptyでnullと空文字を判定する
- IsNullOrEmptyを使う理由
- string.IsNullOrWhiteSpaceでnull・空文字・空白を判定する
- IsNullOrEmptyとIsNullOrWhiteSpaceの違い
- 実務での基本テンプレート
- ユーザー入力をチェックする実例
- 検索フォームで使う例
- 必須項目のチェックで使う例
- なぜLengthで判定しないほうがよいのか
- nullチェックと空文字チェックを分ける場合
- 空白を削除するTrimとの違い
- 「空か判定する」と「空白を削除する」を分けて考える
- メールアドレスのチェック例
- ファイルパスをチェックする例
- 設定値のチェックで使う例
- null許容参照型とstring?を理解する
- ユーティリティクラスにまとめる場合
- セキュリティ上の注意点
- よくある間違い
- 業務システムで重要な「未入力の定義」
- 実務で使える入力チェックの完成形
- 使い分けを最終確認する
- まとめ
C#でnull・空文字・空白を判定する方法
C#で業務・実務向けのプログラムを開発していると、「文字列に値が入っているか」を確認する処理が頻繁に登場します。
たとえば、ユーザーが入力した名前、検索キーワード、メールアドレス、住所、ファイルパス、設定値、データベースから取得した文字列などです。
このとき、単純に「文字列が空かどうか」だけを考えるのではなく、次の3つの状態を区別して考えることが重要です。
null:文字列そのものが存在しない"":文字列は存在するが、文字が1文字もない" ":文字列は存在するが、空白文字しか入っていない
C#では、このような文字列の状態を判定するために、主に次のメソッドを使用します。
string.IsNullOrEmpty()string.IsNullOrWhiteSpace()
特に業務・実務では、string.IsNullOrWhiteSpace()を「未入力チェック」の基本として覚えておくと便利です。
ただし、すべてのケースでIsNullOrWhiteSpace()を使えばよいわけではありません。「空白を値として扱うのか」「nullと空文字を区別するのか」など、業務上の仕様によって適切な判定方法が変わります。
まず「null・空文字・空白」の違いを理解する
最初に、この3つの違いを理解しましょう。
nullとは何か
nullは、簡単にいうと「文字列の値が存在しない」状態です。
// nullを設定する
string? value = null;
// valueには文字列の値が存在しません。C#ここで重要なのは、nullと空文字列は同じではないということです。
空文字とは何か
空文字列は、文字列そのものは存在していますが、中に文字が1文字も入っていない状態です。
// 空文字列を設定する
string value = "";
// 文字列は存在しますが、文字数は0です。
Console.WriteLine(value.Length); // 0C#つまり、次の2つは見た目は似ていますが、C#では別の状態です。
// 文字列が存在しない
string? value1 = null;
// 文字列は存在するが、文字数が0
string value2 = "";C#空白とは何か
空白文字とは、スペースやタブなどの「見た目には何もないように見える文字」です。
たとえば、次の文字列です。
// 半角スペースが3文字入っている
string value = " ";
// スペースも文字なので、文字数は3です。
Console.WriteLine(value.Length); // 3C#この文字列は空文字列ではありません。
そのため、string.IsNullOrEmpty()では「空ではない」と判定されます。
ここが文字列の入力チェックで非常に重要なポイントです。
3つの状態を表で整理する
それぞれの状態を整理すると、次のようになります。
| 値 | 意味 | 文字数 |
|---|---|---|
null | 値が存在しない | 取得できない |
"" | 空文字列 | 0 |
" " | 空白だけの文字列 | 3 |
"C#" | 通常の文字列 | 2 |
プログラミング初心者のうちは、null、""、" "をすべて「何も入力されていない」と考えてしまいがちです。
しかし、プログラムではそれぞれ意味が違います。
まずは「null」「空文字」「空白だけの文字列は別物」ということを覚えておきましょう。
string.IsNullOrEmptyでnullと空文字を判定する
C#で「nullまたは空文字か」を判定する場合は、string.IsNullOrEmpty()を使用します。
基本的な書き方は次のとおりです。
string? value = null;
// nullまたは空文字列ならtrueになります。
if (string.IsNullOrEmpty(value))
{
Console.WriteLine("値がありません。");
}
else
{
Console.WriteLine("値が入力されています。");
}C#string.IsNullOrEmpty()は、次の2つを判定できます。
null""
たとえば、次のコードではtrueになります。
// nullの場合
string? value1 = null;
// nullなのでtrue
Console.WriteLine(string.IsNullOrEmpty(value1)); // TrueC#空文字列の場合もtrueになります。
// 空文字列の場合
string value2 = "";
// 空文字列なのでtrue
Console.WriteLine(string.IsNullOrEmpty(value2)); // TrueC#一方、通常の文字列が入っている場合はfalseです。
// 文字列が入っている場合
string value3 = "C#";
// nullでも空文字列でもないのでfalse
Console.WriteLine(string.IsNullOrEmpty(value3)); // FalseC#IsNullOrEmptyを使う理由
もちろん、次のように自分で判定することもできます。
string? value = GetValue();
// nullか、空文字列かを個別に判定する
if (value == null || value == "")
{
Console.WriteLine("値がありません。");
}C#しかし、C#にはこの判定をまとめて行うstring.IsNullOrEmpty()があります。
string? value = GetValue();
// nullまたは空文字列かまとめて判定する
if (string.IsNullOrEmpty(value))
{
Console.WriteLine("値がありません。");
}C#後者のほうが「nullまたは空文字を判定している」という意図がコードから明確に読み取れます。
業務システムでは、数か月後や数年後に別の開発者がコードを読むことがあります。そのため、単に動くコードを書くのではなく、何を意図しているコードなのかが分かりやすいコードを書くことも重要です。
string.IsNullOrWhiteSpaceでnull・空文字・空白を判定する
次に重要なのが、string.IsNullOrWhiteSpace()です。
このメソッドは、次の状態をまとめて判定できます。
null- 空文字列
- 空白文字だけの文字列
たとえば、次のコードです。
// スペースだけの文字列
string value = " ";
// null、空文字、空白だけの場合はtrue
if (string.IsNullOrWhiteSpace(value))
{
Console.WriteLine("実質的に空です。");
}C#IsNullOrEmpty()では空白だけの文字列を検出できませんでしたが、IsNullOrWhiteSpace()なら検出できます。
IsNullOrEmptyとIsNullOrWhiteSpaceの違い
この2つの違いは、C#の文字列処理で特に重要です。
| 入力値 | IsNullOrEmpty | IsNullOrWhiteSpace |
|---|---|---|
null | true | true |
"" | true | true |
" " | false | true |
"C#" | false | false |
" C# " | false | false |
つまり、次のように覚えると分かりやすいです。
// nullまたは「長さ0」の文字列を判定
string.IsNullOrEmpty(value);
// null、長さ0、空白だけの文字列を判定
string.IsNullOrWhiteSpace(value);C#特にユーザー入力のチェックでは、「スペースだけ入力された状態も未入力として扱う」という仕様がよくあります。
その場合は、IsNullOrWhiteSpace()が候補になります。
実務での基本テンプレート
まずは次のテンプレートを覚えておくと便利です。
// 判定対象の文字列を取得する
string? value = GetValue();
// null、空文字、空白だけの場合をチェックする
if (string.IsNullOrWhiteSpace(value))
{
// 未入力の場合の処理
Console.WriteLine("値を入力してください。");
// 必要に応じて処理を終了する
return;
}
// ここから先は入力値が存在する場合の処理
Console.WriteLine($"入力値:{value}");C#「nullと空文字だけを判定したい」という場合は、こちらです。
// 判定対象の文字列を取得する
string? value = GetValue();
// nullまたは空文字列かチェックする
if (string.IsNullOrEmpty(value))
{
// 値が存在しない場合の処理
Console.WriteLine("値がありません。");
// 必要に応じて処理を終了する
return;
}
// 値が存在する場合の処理
Console.WriteLine($"入力値:{value}");C#ユーザー入力をチェックする実例
コンソールアプリケーションで名前を入力してもらう例を考えてみましょう。
Console.Write("名前を入力してください:");
// ユーザーが入力した文字列を取得する
// nullになる可能性があるためstring?にする
string? name = Console.ReadLine();
// null、空文字、空白だけの場合をチェックする
if (string.IsNullOrWhiteSpace(name))
{
Console.WriteLine("名前を入力してください。");
return;
}
// ここまで来た場合は、空白だけではない値が入力されています。
Console.WriteLine($"こんにちは、{name}さん。");C#このコードでは、ユーザーが何も入力せずEnterを押した場合だけでなく、スペースだけを入力した場合も未入力として扱えます。
ユーザー入力を扱うプログラムでは、この考え方が非常に役立ちます。
検索フォームで使う例
Webアプリケーションや業務システムでは、検索キーワードの入力チェックもよく行います。
// 検索キーワードを取得する
string? keyword = GetSearchKeyword();
// null、空文字、空白だけなら検索を実行しない
if (string.IsNullOrWhiteSpace(keyword))
{
Console.WriteLine("検索キーワードを入力してください。");
return;
}
// キーワードが入力されている場合は検索処理を実行する
Console.WriteLine($"「{keyword}」で検索します。");C#このように、検索処理を実行する前に入力値をチェックしておくことで、「検索条件が何もない状態で処理を実行する」といった問題を防ぎやすくなります。
必須項目のチェックで使う例
業務システムの入力画面では、「名前」「住所」「電話番号」など、必須項目が設定されていることがあります。
たとえば、次のようにチェックできます。
// ユーザー名を取得する
string? userName = GetUserName();
// ユーザー名が未入力かチェックする
if (string.IsNullOrWhiteSpace(userName))
{
Console.WriteLine("ユーザー名を入力してください。");
return;
}
// メールアドレスを取得する
string? email = GetEmail();
// メールアドレスが未入力かチェックする
if (string.IsNullOrWhiteSpace(email))
{
Console.WriteLine("メールアドレスを入力してください。");
return;
}
// 必須項目のチェックを通過した場合
Console.WriteLine("必須項目の入力チェックを通過しました。");C#このように、入力チェックを処理の早い段階で行うことで、その後の処理をシンプルにできます。
なぜLengthで判定しないほうがよいのか
初心者の方がよく書いてしまうのが、次のようなコードです。
string? value = GetValue();
// valueがnullの場合、問題が発生します
if (value.Length == 0)
{
Console.WriteLine("空です。");
}C#問題は、valueがnullになる可能性があることです。
nullにはLengthプロパティがありません。
そのため、実行時にNullReferenceExceptionが発生する可能性があります。
「nullまたは空文字」を判定したいのであれば、次のようにするほうが安全です。
string? value = GetValue();
// nullまたは空文字を安全に判定する
if (string.IsNullOrEmpty(value))
{
Console.WriteLine("値がありません。");
}C#また、「空白だけの場合も空として扱う」なら次のようにします。
string? value = GetValue();
// null、空文字、空白だけを判定する
if (string.IsNullOrWhiteSpace(value))
{
Console.WriteLine("値がありません。");
}C#nullチェックと空文字チェックを分ける場合
通常はIsNullOrEmpty()でまとめて判定できますが、業務仕様によってはnullと空文字を区別する場合があります。
たとえば、nullは「データが存在しない」、空文字は「ユーザーが値を削除した」という意味で扱うシステムです。
その場合は、次のように分けて判定します。
string? value = GetValue();
// nullかどうかを確認する
if (value == null)
{
// データそのものが存在しない場合
Console.WriteLine("値が存在しません。");
return;
}
// 空文字かどうかを確認する
if (value == "")
{
// 値は存在するが、空文字の場合
Console.WriteLine("値が空文字です。");
return;
}
// nullでも空文字でもない場合
Console.WriteLine($"値:{value}");C#このように、「nullと空文字を区別する必要があるかどうか」は業務仕様によって決まります。
区別する必要がないのであれば、次のようにまとめるほうがシンプルです。
string? value = GetValue();
// nullまたは空文字なら同じ処理をする
if (string.IsNullOrEmpty(value))
{
Console.WriteLine("値がありません。");
return;
}C#空白を削除するTrimとの違い
文字列の処理では、Trim()もよく使われます。
Trim()は、文字列の前後にある空白を削除するためのメソッドです。
string value = " C# ";
// 文字列の前後の空白を削除する
string trimmedValue = value.Trim();
Console.WriteLine(trimmedValue); // C#C#ここで重要なのは、Trim()とIsNullOrWhiteSpace()は目的が違うということです。
IsNullOrEmpty()→ nullまたは空文字か判定するIsNullOrWhiteSpace()→ null、空文字、空白だけか判定するTrim()→ 前後の空白を取り除く
したがって、「空白だけか確認したい」という目的であれば、次のようにTrim()を使って判定するよりも、
string? value = GetValue();
// Trimしてから空文字か判定する
if (value == null || value.Trim() == "")
{
Console.WriteLine("空です。");
}C#単純な未入力チェックなら、次のように書くほうが意図が明確です。
string? value = GetValue();
// null、空文字、空白だけを判定する
if (string.IsNullOrWhiteSpace(value))
{
Console.WriteLine("空です。");
}C#ただし、入力値そのものから前後の空白を取り除きたい場合には、Trim()が必要です。
string? name = GetUserName();
// nullではない場合だけ前後の空白を取り除く
string? normalizedName = name?.Trim();
// 正規化した名前を利用する
Console.WriteLine(normalizedName);C#「空か判定する」と「空白を削除する」を分けて考える
実務では、入力値のチェックと文字列の加工を混同しないことが重要です。
たとえば、次の入力があったとします。
" 山田太郎 "
この文字列は空ではありません。
そのため、未入力かどうかだけを確認するなら、次のコードで十分です。
string? name = " 山田太郎 ";
// 未入力かどうかだけを確認する
if (string.IsNullOrWhiteSpace(name))
{
Console.WriteLine("名前が入力されていません。");
}C#一方、「データを保存するときには前後の空白を削除する」という仕様なら、別途Trim()を使用します。
string? name = " 山田太郎 ";
// 前後の空白を削除する
string? normalizedName = name?.Trim();
// 結果を表示する
Console.WriteLine(normalizedName); // 山田太郎C#このように、
- 値が存在するか
- 値が空白だけではないか
- 前後の空白を削除するか
を別々の処理として考えると、プログラムの設計が分かりやすくなります。
メールアドレスのチェック例
メールアドレスを扱う場合も、最初に未入力かどうかを確認できます。
// メールアドレスを取得する
string? email = GetEmail();
// 未入力か確認する
if (string.IsNullOrWhiteSpace(email))
{
Console.WriteLine("メールアドレスを入力してください。");
return;
}
// ここでは「何か文字列が入力された」ことが確認できた状態です。
// メールアドレスとして正しい形式かどうかは別途検証します。
Console.WriteLine($"メールアドレス:{email}");C#ここで非常に重要なのは、IsNullOrWhiteSpace()を通過したからといって、メールアドレスとして正しいとは限らないことです。
たとえば、次の値は空ではありません。
string email = "abc";C#しかし、業務上メールアドレスとして受け付けるかどうかは別の問題です。
つまり、入力値の検証では、次のように段階を分けて考えます。
- 値が存在するか
- 空白だけではないか
- 文字数が仕様の範囲内か
- 形式が正しいか
- 業務上利用可能な値か
このようにバリデーションを段階的に考えると、複雑な入力チェックも整理しやすくなります。
ファイルパスをチェックする例
ファイルパスを設定値などから取得する場合にも、空チェックが必要になることがあります。
// 設定ファイルなどからファイルパスを取得する
string? filePath = GetFilePath();
// ファイルパスが未設定か確認する
if (string.IsNullOrWhiteSpace(filePath))
{
Console.WriteLine("ファイルパスが設定されていません。");
return;
}
// ここでは「ファイルパスの文字列が存在する」ことを確認しただけです。
// 実際にファイルが存在するかどうかは別途確認します。
Console.WriteLine($"ファイルパス:{filePath}");C#この例でも、「空ではない」と「正しく利用できる」は別です。
文字列が存在していても、ファイルそのものが存在するとは限りません。
そのため、実際にファイルを開く処理では、必要に応じてファイルの存在確認などを追加します。
設定値のチェックで使う例
業務システムでは、設定ファイルから文字列を読み込むことがあります。
// 設定からAPIのURLを取得するイメージ
string? apiUrl = GetApiUrl();
// URLが設定されているか確認する
if (string.IsNullOrWhiteSpace(apiUrl))
{
Console.WriteLine("APIのURLが設定されていません。");
return;
}
// API URLを使用して処理を続ける
Console.WriteLine($"接続先:{apiUrl}");C#ただし、これだけでURLが正しいとは限りません。
IsNullOrWhiteSpace()が確認するのは、あくまで「null、空文字、空白だけではないか」です。
URLとして正しい形式かどうかは、必要に応じて別途検証します。
null許容参照型とstring?を理解する
最近のC#では、nullになる可能性がある文字列をstring?と表現します。
// nullになる可能性がある
string? value = null;
// nullにならないことを前提とする
string text = "C#";C#?を付けることで、「この文字列はnullになる可能性があります」ということをコンパイラに伝えられます。
ユーザー入力など、外部から値を受け取る処理では、nullの可能性を意識することが重要です。
// ユーザー入力はnullになる可能性がある
string? input = Console.ReadLine();
// null、空文字、空白だけをチェックする
if (string.IsNullOrWhiteSpace(input))
{
Console.WriteLine("入力してください。");
return;
}
// 入力済みの場合の処理
Console.WriteLine($"入力値:{input}");C#このように、string?とIsNullOrWhiteSpace()を組み合わせることで、nullを意識したコードを書きやすくなります。
ユーティリティクラスにまとめる場合
大規模な業務システムでは、文字列に関する共通処理をユーティリティクラスにまとめることがあります。
たとえば、次のようなクラスを作れます。
/// <summary>
/// 文字列に関する共通処理を提供します。
/// </summary>
public static class StringUtility
{
/// <summary>
/// nullまたは空文字列か判定します。
/// </summary>
/// <param name="value">判定対象の文字列</param>
/// <returns>nullまたは空文字列の場合はtrue</returns>
public static bool IsNullOrEmpty(string? value)
{
// C#標準のIsNullOrEmptyを利用する
return string.IsNullOrEmpty(value);
}
/// <summary>
/// null、空文字列、空白だけの文字列か判定します。
/// </summary>
/// <param name="value">判定対象の文字列</param>
/// <returns>null、空文字列、空白だけの場合はtrue</returns>
public static bool IsNullOrWhiteSpace(string? value)
{
// C#標準のIsNullOrWhiteSpaceを利用する
return string.IsNullOrWhiteSpace(value);
}
}C#使用すると次のようになります。
// 判定対象の文字列
string? value = GetValue();
// null、空文字、空白だけか判定する
if (StringUtility.IsNullOrWhiteSpace(value))
{
Console.WriteLine("値がありません。");
return;
}
// 値が存在する場合の処理
Console.WriteLine($"値:{value}");C#ただし、ここで注意したいのは、単純にC#標準メソッドを呼び出すだけの独自メソッドを作ることが常に良いとは限らない点です。
たとえば、次のコードは非常にシンプルです。
// C#標準メソッドを直接利用する
if (string.IsNullOrWhiteSpace(value))
{
// 未入力処理
}C#このような処理をわざわざ独自のStringUtilityに置き換えると、かえってコードが分かりにくくなる場合があります。
独自ユーティリティを作る場合は、「プロジェクト全体で共通する独自ルールがある」「複数の処理を組み合わせて共通化する」など、明確な理由がある場合に検討するとよいでしょう。
セキュリティ上の注意点
文字列の空チェックは重要ですが、空チェックを行っただけで入力値が安全になるわけではありません。
これはセキュリティ上、とても重要な考え方です。
たとえば、ユーザーが入力した文字列をデータベースで検索するとします。
// ユーザーが入力した検索キーワード
string? keyword = Console.ReadLine();
// 未入力かチェックする
if (string.IsNullOrWhiteSpace(keyword))
{
Console.WriteLine("検索キーワードを入力してください。");
return;
}
// ここからデータベース検索を行う
Search(keyword);C#このコードで確認できるのは、「キーワードが未入力ではない」ということだけです。
入力値をデータベース、HTML、OSのコマンド、ファイル操作などへ渡す場合は、それぞれの利用先に応じたセキュリティ対策が必要です。
たとえば、データベースへ値を渡す場合は、SQL文へ文字列を直接連結するのではなく、パラメータ化クエリを利用するなどの対策が必要です。
// 空チェックは「入力値が存在するか」を確認する処理です。
// SQLインジェクション対策そのものではありません。
if (string.IsNullOrWhiteSpace(keyword))
{
return;
}
// 実際のデータベース処理では、
// SQLパラメータなどを利用して値を安全に渡します。C#つまり、「空ではない」ことと「安全な入力である」ことはまったく別の問題です。
よくある間違い
間違い1:Lengthを使っていきなり判定する
string? value = GetValue();
// valueがnullの場合に問題が発生する可能性があります
if (value.Length == 0)
{
Console.WriteLine("空です。");
}C#nullの可能性がある文字列に対して、いきなりLengthを使用するのは避けましょう。
「nullまたは空文字」を確認したいなら、次のようにします。
// nullまたは空文字を判定する
if (string.IsNullOrEmpty(value))
{
Console.WriteLine("空です。");
}C#間違い2:IsNullOrEmptyで空白も判定できると思う
string value = " ";
// 空白は文字として存在するためfalseになります
if (string.IsNullOrEmpty(value))
{
Console.WriteLine("空です。");
}C#空白だけの場合も未入力として扱いたいなら、IsNullOrWhiteSpace()を使用します。
// null、空文字、空白だけを判定する
if (string.IsNullOrWhiteSpace(value))
{
Console.WriteLine("未入力です。");
}C#間違い3:空チェックだけで正しい入力だと判断する
string? email = GetEmail();
// 空ではないことだけを確認しています
if (!string.IsNullOrWhiteSpace(email))
{
// メールアドレスとして正しいとは限りません
}C#空チェックは「値があるか」を確認するための処理です。
文字数、形式、利用可能な文字、業務上の制約などがある場合は、別途バリデーションを行う必要があります。
業務システムで重要な「未入力の定義」
実務で文字列チェックを設計するとき、最も重要なのは「どの状態を未入力とみなすか」を決めることです。
たとえば、次の値があります。
null
""
" "
" "
"C#"
" C# "
これらをすべて同じ「未入力」とするのか、それとも区別するのかは、システムの仕様によって変わります。
たとえば、一般的な入力フォームで「スペースだけの入力を未入力として扱う」という仕様なら、次のコードが適しています。
// null、空文字、空白だけを未入力として扱う
if (string.IsNullOrWhiteSpace(value))
{
Console.WriteLine("必須項目です。");
return;
}C#一方で、空白そのものに業務上の意味があるデータなら、単純にIsNullOrWhiteSpace()を使用すると仕様と合わない可能性があります。
そのため、メソッドを先に決めるのではなく、業務上の「未入力」の定義を先に決めることが大切です。
実務で使える入力チェックの完成形
ここまでの内容を組み合わせると、次のようなコードになります。
public static void ProcessUserName(string? name)
{
// ----------------------------------------
// 1. 未入力チェック
// ----------------------------------------
// null、空文字、空白だけの場合はエラー
if (string.IsNullOrWhiteSpace(name))
{
Console.WriteLine("名前を入力してください。");
return;
}
// ----------------------------------------
// 2. 文字数チェック
// ----------------------------------------
// 名前が長すぎないか確認する
if (name.Length > 100)
{
Console.WriteLine("名前は100文字以内で入力してください。");
return;
}
// ----------------------------------------
// 3. 正常な入力として処理
// ----------------------------------------
Console.WriteLine($"名前:{name}");
}C#このコードでは、最初に未入力を排除し、その後で文字数をチェックしています。
このように、「入力値を受け取る → 未入力をチェックする → 制約をチェックする → 正常処理を行う」という流れを作ると、業務プログラムが整理しやすくなります。
使い分けを最終確認する
最後に、それぞれの役割を整理しましょう。
| 目的 | 使用するもの |
|---|---|
| nullまたは空文字を判定する | string.IsNullOrEmpty() |
| null・空文字・空白だけを判定する | string.IsNullOrWhiteSpace() |
| 空文字を表す | string.Empty |
| 前後の空白を削除する | Trim() |
| 文字数を確認する | Length |
特に次の2つは確実に覚えておきましょう。
// nullまたは空文字か判定する
if (string.IsNullOrEmpty(value))
{
// 値がない
}
// null、空文字、空白だけか判定する
if (string.IsNullOrWhiteSpace(value))
{
// 実質的に未入力
}C#まとめ
C#で文字列の状態を判定する場合、まず「null」「空文字」「空白だけの文字列」はそれぞれ別の状態であることを理解することが重要です。
string.IsNullOrEmpty()は、nullまたは空文字列を判定するために使用します。
string.IsNullOrWhiteSpace()は、null、空文字列、空白文字だけの文字列を判定するために使用します。
ユーザー入力の必須チェックでは、スペースだけの入力を許可するのかどうかが重要になるため、要件に応じて使い分けます。
そして、空チェックはあくまで「値が存在するか」を確認する処理です。文字数、形式、業務上の制約、データベース上の存在確認などは、必要に応じて別のバリデーションとして実装します。
また、ユーザーから受け取った文字列をデータベースやHTMLなどで利用する場合、空チェックだけではセキュリティ対策になりません。利用先に応じて、パラメータ化、適切なエンコード、入力値検証などを組み合わせることが重要です。
まずは次の2つを基本パターンとして覚えておくと、C#の文字列チェックを実務で扱いやすくなります。
// nullまたは空文字を判定
if (string.IsNullOrEmpty(value))
{
// nullまたは空文字の場合の処理
}
// null・空文字・空白だけを判定
if (string.IsNullOrWhiteSpace(value))
{
// 未入力として扱う場合の処理
}C#「null・空文字・空白をどう扱うか」は、単なるC#の文法ではなく、入力データをどのように扱うかという業務仕様そのものに関わります。そのため、実務では「どのメソッドを使うか」だけでなく、「この項目では何を未入力と定義するのか」まで意識して実装することが大切です。
