C# IsNullOrEmpty null・空の判定と使い方のポイント!

こんにちは、トミセン(@tomisenblog)です。

文字列がnullか空文字か判定するというのはよくある処理ですが、

「C#で文字列がnullか空文字かの判定って簡単にできないの?」
「C#のString.IsNullOrEmptyを使うときのポイントって?」

出会ってしまえば基本的なテクニックなんですが、情報が見つからなくて思ったより時間がかかってしまっていませんか。

今回はそんなお悩みを解決します。
ずばり!「C# IsNullOrEmpty null・空の判定と使い方のポイント」についてご紹介します。

それでは一緒に学んでいきましょう!

この記事がおすすめな人
  • IsNullOrEmpty について知りたい
  • IsNullOrEmpty の使い方のポイントを知りたい
目次

IsNullOrEmpty とは

文字列がnullか空文字か簡単に判定できる

文字列がnullまたは空の文字列かを判定できます。

文字列がnullかどうかをチェックし、さらにnullでない場合は、空の文字列ではないかをチェックします。

補足空の文字列とは、「長さが0の文字列(Length == 0)」・「””」・「string.Empty」のことです。

実際のコードはこちらになります。

Console.WriteLine("■null");

string stringValue = null;

if (string.IsNullOrEmpty(stringValue))
{   
    Console.WriteLine("nullまたは空である");
}
else
{
    Console.WriteLine("nullでも空でもない");
}

// 【実行結果】
// ■null
// nullまたは空である


Console.WriteLine("■空文字");

stringValue = "";

if (string.IsNullOrEmpty(stringValue))
{ 
    Console.WriteLine("nullまたは空である");
}
else
{
    Console.WriteLine("nullでも空でもない");
}

// 【実行結果】
// ■空文字
// nullまたは空である


Console.WriteLine("■空白");

stringValue = "     ";

if (string.IsNullOrEmpty(stringValue))
{  
    Console.WriteLine("nullまたは空である");
}
else
{
    Console.WriteLine("nullでも空でもない");
}

// 【実行結果】
// ■空白
// nullでも空でもない


Console.WriteLine("■それ以外");

stringValue = "それ以外";

if (string.IsNullOrEmpty(stringValue))
{ 
    Console.WriteLine("nullまたは空である");
}
else
{
    Console.WriteLine("nullでも空でもない");
}

// 【実行結果】
// ■それ以外
// nullでも空でもない

IsNullOrEmptyメソッドは、Stringクラスのメソッドなのでstring.を前につけます。
そして、IsNullOrEmptyに続く()の部分に判定したい文字列をセットします。

文字列がnullか空文字かどちらかに当てはまる場合にtrueを返します。

IsNullOrEmptyメソッドを使わない場合でも同様の判定はできます。
IsNullOrEmptyを使わない場合を見てみましょう。このようになります。

リストでもIsNullOrEmptyでnull・空判定をしたい方は「【C# 拡張メソッド】 Listのnull・空チェック」のページをどうぞ。

あわせて読みたい
【C# 拡張メソッド】 Listのnull・空チェック メソッドの戻り値がListで結果によってnullだったり、空だったりする場合、 その判定のソースコードってけっこう長かったりします・・・・。 そこで、拡張メソッドを使...
// IsNullOrEmptyメソッドと同様の判定
if (stringValue == null || stringValue == "")
{
    // nullまたは空である   
}
else
{
    // nullでも空でもない
}

stringValue == null || stringValue == “”のようにnullかどうか、空文字かどうかを順番にチェックしていきます。
これでも結果は同様になります。何か問題があるわけではありません。

ところがプログラマーのミスで、思わぬバグが発生することもあります。
次のコードを見てみてください。

if (stringValue == null || otherStringValue == "")
{
    // nullまたは空である   
}
else
{
    // nullでも空でもない
}

何が違うか気づいたでしょうか?

判定に使用している変数が片方だけotherStringValueになっています。

開発の現場でよくある失敗です。
もともとはotherStringValueを判定していたコードをコピーしたのでしょう。他のコードからコピペしたまではいいのですが、変数を片方だけ直して、もう一方は直すのを忘れています。

これが起こる原因は、判定をするために変数を二回書くから必要があるからです。こういう直し漏れを避けるためにも変数を一つしか書かないIsNullOrEmptyは有効です。

ちょっと脱線しますが、このようにif文を書くときに、あまり良くないif文の書き方のパターン2つだけ紹介しておきます。

ここで全て解説はしませんが、興味がある方はif文の書き方について書いた記事「【C#】if文の書き方」をぜひ見てください。if文自体の解説はもちろん、間違いやすいポイントなども紹介しています。

https://tomisenblog.com/c-sharp-beginner…eautiful-code-if

ちょっと脱線 あまり良くないif文の書き方

パターン①:()が多い

分かりやすくするためにという意図だと思いますが、自分にとって分かりやすい書き方が、他のプログラマーからすると分かりにくくなってしまうパターンです。

if ((stringValue == null) || (stringValue == ""))
{
    // nullまたは空である   
}
else
{
    // nullでも空でもない
}

(stringValue == null)(stringValue == “”)の()は書かなくても問題ありません。

分かりやすくしたいというのはわかるんですが、&&・||がたくさんある場合や、stringValue == nullの条件部分が長い場合は、対応する()を探すのに手間がかかります。

不要な()は書かないようにしてください。

パターン②:否定で判定している

if ((stringValue != null) && (stringValue == ""))
{
    // nullでも空でもない
}
else
{
    // nullまたは空である  
}

「nullでも空でもない」と否定が先で、elseで「nullまたは空である」と肯定になっています。ですが、「nullまたは空である」・「nullでも空でもない」の順でも問題はありません。特別な理由がなければ、肯定、否定の順にして下さい。

理由は、人間の脳は否定形を理解するのに時間がかかるからです。
私も先輩社員から言われた時は半信半疑でしたが、二重否定で考えてみるとわかる気がしました。

「そのやり方なら、やれないこともないでしょう」

一瞬考えて「で、どっちなの?」ってなりませんか?

肯定、否定の順に書くようにしてください。

IsNullOrEmpty 使い方のポイント

判定に使う文字列に注意!

IsNullOrEmptyを使う場面は、ボタンクリックなどのユーザーのアクションに対して、入力項目の値をチェックして、処理継続を判定をするロジックなどです。

イメージのために簡単な画面を用意しました。名前を入力するテキストボックスと保存ボタンがあります。

isnullorempty

 

この画面は保存ボタンを押すと、名前テキストボックスの内容を保存します。
名前は必須入力の項目で、保存ボタンを押された時に、入力されていれば保存処理をします。
入力されていなければ、警告メッセージを表示して、名前テキストボックスをフォーカスします。

そのため、保存ボタンを押した時に、名前テキストボックスの値の判定が必要になります。

実際のコードはこちらになります。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
    }

    private void Form1_Shown(object sender, EventArgs e)
    {
        txtName.Focus();
    }

    /// <summary>
    /// 保存ボタン Click
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnSave_Click(object sender, EventArgs e)
    {
        // 入力チェック
        if (string.IsNullOrEmpty(txtName.Text))
        {
            MessageBox.Show("名前を入力して下さい。");
            txtName.Focus();
            return;
        }
        // 保存処理
        Save();
    }

    /// <summary>
    /// 保存処理
    /// </summary>
    private void Save()
    {
        // なんらかの保存処理
    }
}

コードとコメントだけでは分かりにくい部分があるので、ポイントを絞ってコードを解説していきます!

txtNameは、画面の名前テキストボックスのオブジェクトです。
string.IsNullOrEmpty(txtName.Text)で名前テキストボックスの入力値を取得して、null・空文字の判定をしています。

以上で「IsNullOrEmptyメソッドでnull・空の判定」が出来ました!

と、終わってしまいそうですが、次からが非常に大切なポイントです!

実はこのコード、画面の処理としては問題があります。つい忘れてしまいがちな部分なのですが、チェックが1つ漏れています。

具体的には何が問題なのでしょうか。次のコードを見てください。

/// <summary>
/// 保存ボタン Click
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSave_Click(object sender, EventArgs e)
{
    // 入力チェック
    if (string.IsNullOrEmpty(txtName.Text.Trim())) // .Trim()を追加
    {
        MessageBox.Show("名前を入力して下さい。");
        txtName.Focus();
        return;
    }
    // 保存処理
    Save();
}

IsNullOrEmptyに引数として渡していたtxtName.TexttxtName.Text.Trim()に変更しています。
.Trim()を追加することで、文字列の前後の空白を消すメソッドですが、文字列が空白のみの場合は空文字が返ります。

こうすることで、空白のみの文字列もIsNullOrEmptyメソッドで空文字と同じように扱えるようになります。

IsNullOrEmptyメソッドの引数に渡す値に何が入ってくるかを意識しないで使用すると判定がうまくいかず、思わぬ動きをすることがあります。

使い方のポイント

  • 判定する文字列にどんな値が入ってくるかを意識する

同じことはString.IsNullOrWhiteSpaceメソッドでもできます。このあたりの詳しい解説は、後日記事にしたいと思います。

気になっている方がいるかもしれないので、最後にひとつだけ触れてして終わります。
次のソースを見てください。

private void Form1_Shown(object sender, EventArgs e)
{
    txtName.Focus();
}

ShownイベントにFocus()処理が書いてあります。

なぜここにtxtName.Focus();が書いてあるのか、興味がある方はフォームロード時のフォーカスついて書いた記事「【C#】フォームロード(Form_Load)時にフォーカスする方法」をぜひ見てください。

あわせて読みたい
【C#】フォームロード(Form_Load)時にフォーカスする方法 「Windowsアプリケーションで、フォームロード(Form_Load)時にコントロールにフォーカスするのはどうしたらいいの?」 「フォームロード(Form_Load)時にコントロールに...

まとめ

C# IsNullOrEmpty null・空の判定と使い方のポイント! について紹介してきました。
C#は便利なメソッドやクラスがたくさんあるのですが、使いこなせるようになるのは時間がかかりますよね。

この記事がコーディングスキルアップの助けになると嬉しいです。

IsNullOrWhiteSpaceについて知りたい方は「C# IsNullOrWhiteSpaceとは? IsNullOrEmptyとの違い」をどうぞ。

それでは、また。

こちらの記事も読まれています!


よかったらシェアしてね!
目次
閉じる