連載
» 2018年09月26日 05時00分 公開

.NET TIPS:文字列がnull(Nothing)か空文字列かを簡単に判定するには?[C#/VB、.NET 2.0]

文字列がnull(Nothing)あるいは空文字列であるかどうかを判定するには、StringクラスのIsNullOrEmptyメソッドなど、幾つかの方法がある。

[一色政彦, 山本康彦,共著]
「.NET TIPS」のインデックス

連載「.NET TIPS」

本稿は2006/08/04に初版公開した記事を改訂し、Visual Studio 2017でコードの動作検証、Null&空白文字列チェックの方法とNull&文字列長チェックの方法の追加、図版の追加、全般的な構成の変更などを行ったものです。


 文字列(=String型のオブジェクト)がnull(C#の場合。Visual BasicではNothing)かどうかをチェックし、さらにnull(Nothing)ではない場合にはそれが空文字列(=長さが0の文字列。「""」あるいは「String.Empty」)かどうかをチェックするというコードは、非常によくあるパターンだ(以降、この一連のチェックを「Null&空文字列チェック」と表現する)。

POINT 文字列がnull(Nothing)か空文字列か空白文字列かを簡単に判定する方法

文字列がnull(Nothing)か空文字列か空白文字列かを簡単に判定する方法 文字列がnull(Nothing)か空文字列か空白文字列かを簡単に判定する方法


 また、空文字での判定の他に、空白文字だけの文字列も除外したいとか、あるいは、文字列の長さが一定未満のものも除外したいといったニーズもあるだろう。改訂の機に追記しておく。特定のトピックをすぐに知りたいという方は以下のリンクを活用してほしい。

.NET Framework 1.xの場合

 .NET Framework 1.xではこのNull&空文字列チェックを実装するには、次のようなコードを書くことが多かっただろう。

if ((checkString != null) && (checkString.Length != 0))
{
  // nullではなく、かつ空文字列でもない
}
else
{
  // null、もしくは空文字列である
}

If (checkString IsNot Nothing) AndAlso (checkString.Length <> 0) Then
  ' Nothingではなく、かつ空文字列でもない
Else
  ' Nothing、もしくは空文字列である
End If

.NET Framework 1.xでNull&空文字列チェックを行うコード(上:C#、下:VB)

.NET Framework 2.0以降の場合

 しかし.NET Framework 2.0ではこの「Null&空文字列チェック」を容易に実現するための次のメソッドが追加された。

 ・String.IsNullOrEmptyメソッド(String)

 String.IsNullOrEmptyメソッドは静的メソッドとして実装されており、パラメーターで受け取った文字列がnull(Nothing)もしくは空文字列の場合に戻り値としてTrueを返し、null(Nothing)でも空文字列でもなければFalseを返すという仕様になっている。

 このメソッドを使って上記のコードを書き直したのが次のコードである。

if (!string.IsNullOrEmpty(checkString))
{
  // nullではなく、かつ空文字列でもない
}
else
{
  // null、もしくは空文字列である
}

If (Not String.IsNullOrEmpty(checkString)) Then
  ' Nothingではなく、かつ空文字列でもない
Else
  ' Nothing、もしくは空文字列である
End If

.NET Framework 2.0でNull&空文字列チェックを行うコード(上:C#、下:VB)

 このようにString.IsNullOrEmptyメソッドを使うことで、Null&空文字列チェックをシンプルに記述できる。

Null&空白文字列チェック

 文字列がnull(Nothing)ではなく、空文字列でもなく、さらに空白文字列(空白文字だけを含む文字列)でもないという「Null&空白文字列チェック」は、次のコードのように書ける。もしも空白文字列だった場合、String.Trimメソッドを使って文字列の前後から空白文字列を全て取り去ると、長さゼロの空文字列になる。String.Trimメソッドの結果の長さを判定するだけで、空文字列チェックと空白文字列チェックがいっぺんにできるのだ。

if ((checkString != null) && (checkString.Trim().Length != 0))
{
  // nullではなく、かつ空文字列でもなく、かつ空白文字列でもない
}
else
{
  // null、もしくは空文字列、もしくは空白文字列である
}

If ((checkString IsNot Nothing) AndAlso (checkString.Trim().Length <> 0)) Then
  ' Nothingではなく、かつ空文字列でもなく、かつ空白文字列でもない
Else
  ' Nothing、もしくは空文字列、もしくは空白文字列である
End If

.NET Framework 1.xでNull&空白文字列チェックを行うコード(上:C#、下:VB)
Trimメソッドが削除する空白文字列には、スペースだけでなく、タブや全角空白なども含まれる。

 .NET Framework 4.0ではこの「Null&空白文字列チェック」を容易に実現するためのString.IsNullOrWhiteSpaceメソッドが追加された。上のコードは、次のコードのように書き直せる。

if (!string.IsNullOrWhiteSpace(checkString))
{
  // nullではなく、かつ空文字列でもなく、かつ空白文字列でもない
}
else
{
  // null、もしくは空文字列、もしくは空白文字列である
}

If (Not String.IsNullOrWhiteSpace(checkString)) Then
  ' Nothingではなく、かつ空文字列でもなく、かつ空白文字列でもない
Else
  ' Nothing、もしくは空文字列、もしくは空白文字列である
End If

.NET Framework 4.0でNull&空白文字列チェックを行うコード(上:C#、下:VB)

 なお、このString.IsNullOrWhiteSpaceメソッドは「.NET TIPS:文字列がnull(Nothing)か空文字列か「空白か」を簡単に判定するには?[4.0以降、C#、VB]」でも紹介している。

Null&文字列長チェック

 文字列がnull(Nothing)ではなく、空文字列でもなく、さらに指定の長さ未満ではない(=指定の長さ以上である)という「Null&文字列長チェック」もある。これは例えば、読み込んだ文字列は2桁以上の記号であるはずというようなチェックだ。例として2文字未満を除外する「Null&文字列長チェック」は次のコードのように書ける。

if ((checkString != null) && (checkString.Length >= 2))
{
  // nullではなく、かつ2文字未満でもない
}
else
{
  // null、もしくは2文字未満である
}

If ((checkString IsNot Nothing) AndAlso (checkString.Length >= 2)) Then
  ' Nothingではなく、かつ2文字未満でもない
Else
  ' Nothing、もしくは2文字未満である
End If

.NET Framework 1.xでNull&文字列長チェックを行うコード(上:C#、下:VB)

 C# 6.0/VB 14で導入されたNull条件演算子を使うと、上のコードを簡潔に書き直せる(次のコード)。

if (checkString?.Length >= 2)
{
  // nullではなく、かつ2文字未満でもない
}
else
{
  // null、もしくは2文字未満である
}

If (checkString?.Length >= 2) Then
  ' Nothingではなく、かつ2文字未満でもない
Else
  ' Nothing、もしくは2文字未満である
End If

C# 6.0/VB 14でNull&文字列長チェックを行うコード(上:C#、下:VB)
なお、「Null&空文字列チェック」/「Null&空白文字列チェック」もNull条件演算子を使って同じように書けるが、それぞれString.IsNullOrEmptyメソッド/String.IsNullOrWhiteSpaceメソッドを使った方が簡潔で分かりやすい。

更新履歴

【2018/09/26】Visual Studio 2017でコードの動作検証、DateTimeOffset構造体について追記、図版の追加、全般的な構成の変更などを行いました。

【2006/08/05】本記事の一部に以下のような誤りがありました。おわびして訂正させていただきます。
誤: String.IsNullOrEmptyメソッドは静的メソッドとして実装されており、パラメーターで受け取った文字列がnull(Nothing)もしくは空文字列の場合に戻り値としてFalseを返し、null(Nothing)でも空文字列でもなければTrueを返すという仕様になっている。
正: String.IsNullOrEmptyメソッドは静的メソッドとして実装されており、パラメーターで受け取った文字列がnull(Nothing)もしくは空文字列の場合に戻り値としてTrueを返し、null(Nothing)でも空文字列でもなければFalseを返すという仕様になっている。

【2006/08/04】初版公開。


「.NET TIPS」のインデックス

.NET TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。