string.IsNullOrEmpty() / string.IsNullOrWhiteSpace()
| 対応: | IsNullOrEmpty() | C# 2.0(2005) |
|---|---|---|
| IsNullOrWhiteSpace() | C# 4.0(2010) |
文字列が null または空文字列かを判定する『string.IsNullOrEmpty()』、空白のみの文字列も検出する『string.IsNullOrWhiteSpace()』、そして null の代替値を返す『??』演算子です。
構文
// 文字列が null または "" の場合に true を返します。 string.IsNullOrEmpty(string? value) // 文字列が null、""、またはスペース・タブなど空白のみの場合に true を返します。 string.IsNullOrWhiteSpace(string? value) // 左辺が null の場合に右辺の値を返します(null 合体演算子)。 左辺 ?? 右辺 // 左辺が null の場合に右辺を代入します(null 合体代入演算子)。 変数 ??= 値
メソッド一覧
| メンバー | 概要 |
|---|---|
| string.IsNullOrEmpty(string? value) | value が null または長さ 0 の文字列の場合に true を返します。 |
| string.IsNullOrWhiteSpace(string? value) | value が null、空文字列、または空白文字(スペース・タブ・改行)のみの場合に true を返します。 |
| ??(null 合体演算子) | 左辺が null でなければ左辺を、null であれば右辺を返します。 |
| ??=(null 合体代入演算子) | 変数が null の場合にのみ右辺を代入します。 |
サンプルコード
Program.cs
using System; // IsNullOrEmpty() の使い方 string? name1 = null; string? name2 = ""; string? name3 = "孫悟空"; Console.WriteLine(string.IsNullOrEmpty(name1)); // True Console.WriteLine(string.IsNullOrEmpty(name2)); // True Console.WriteLine(string.IsNullOrEmpty(name3)); // False // IsNullOrWhiteSpace() はスペースのみの文字列も検出する string? input = " "; // スペースのみ Console.WriteLine(string.IsNullOrEmpty(input)); // False(IsNullOrEmpty では検出できない) Console.WriteLine(string.IsNullOrWhiteSpace(input)); // True
dotnet run True True False False True
?? 演算子と ??= 演算子
null 合体演算子(??)を使うと、null の場合のデフォルト値を簡潔に指定できます。
NullCoalescing.cs
using System; // ?? 演算子で null の場合のデフォルト値を指定する string? username = null; string displayName = username ?? "ゲスト"; Console.WriteLine(displayName); // ゲスト string? theme = "ベジータ"; string selected = theme ?? "デフォルト"; Console.WriteLine(selected); // ベジータ(null でないのでそのまま使われる) // ??= 演算子の例 string? cache = null; cache ??= "初期値"; Console.WriteLine(cache); // 初期値 // ネストした ?? 演算子 string? a = null; string? b = null; string? c = "フリーザ"; string result = a ?? b ?? c ?? "なし"; Console.WriteLine(result); // フリーザ
dotnet run ゲスト ベジータ 初期値 フリーザ
実践パターン: バリデーション
フォーム入力のバリデーションでの使い方です。
Validation.cs
using System;
void Validate(string? value) {
if (string.IsNullOrWhiteSpace(value)) {
Console.WriteLine("入力が空です。");
return;
}
Console.WriteLine($"入力値: {value.Trim()}");
}
Validate(null);
Validate("");
Validate(" ");
Validate(" 孫悟空 "); // 入力値: 孫悟空
dotnet run 入力が空です。 入力が空です。 入力が空です。 入力値: 孫悟空
よくあるミス
よくあるミス: IsNullOrEmpty() でスペースのみの文字列を検出できない
フォームからの入力にスペースだけを入力した場合、IsNullOrEmpty() では true にならず、バリデーションが通ってしまいます。
using System;
// NG: スペースのみの文字列を IsNullOrEmpty() で検出しようとする
string? userInput = " "; // スペースのみ
if (string.IsNullOrEmpty(userInput)) {
Console.WriteLine("未入力です。"); // ここには到達しない
} else {
Console.WriteLine("入力あり: " + userInput); // こちらに入る
}
dotnet run 入力あり:
修正後は次の通りです。
using System;
// OK: IsNullOrWhiteSpace() を使う
string? userInput = " ";
if (string.IsNullOrWhiteSpace(userInput)) {
Console.WriteLine("未入力です。");
} else {
Console.WriteLine("入力あり: " + userInput);
}
dotnet run 未入力です。
概要
フォーム入力の検証では、ユーザーがスペースだけを入力するケースも考慮が必要です。そのような場合は『IsNullOrEmpty()』よりも『IsNullOrWhiteSpace()』を使う方が適切な場合があります。
『??』演算子は null チェックの if 文をシンプルに書けるため、デフォルト値の設定によく使われます。null 許容型(string?)の詳細は C# の null 安全設計の仕様を参照してください。
型変換のユーティリティは『Convert.ToString() / Convert.ToInt32()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。