この記事では、C#での文字列のnullや空文字の判定方法をまとめて解説します。

nullかそうじゃないか判別したい!

IsNullOrEmptyとIsNullOrWhiteSpaceって何が違うの!?
nullはそのまま処理するとエラーの原因になることも多いので、null判定は重要です!
しっかり仕様を理解して、nullを適切に処理できるようになりましょう!
概要
以下にnullや空文字の判定方法をまとめました。
方法 | 判定対象 |
---|---|
==演算子 | nullのみ(指定文字のみ) |
is演算子 | nullのみ(指定文字のみ) |
IsNullOrEmpty | nullと空文字 |
IsNullOrWhiteSpace | nullと空文字と空白文字(スペース、改行、タブ) |
null合体演算子 | nullのみ |
各方法によって判定対象が異なりますので注意が必要です。
次項では具体的なサンプルとともにもう少し詳しく解説していきます。
サンプル&詳細解説
==演算子
まずは、基本的な判定方法である==演算子のサンプルです。
サンプルコード
namespace SampleCode
{
class SampleCode
{
static void Main()
{
string? str = null;
if(str == null)
{
Console.WriteLine("nullです");
}
else
{
Console.WriteLine("nullではありません");
}
Console.ReadKey();
}
}
}
実行結果
nullです
シンプルな方法ですが、この場合判定できるのはnullのみとなります。
当然、==判定の右辺を空文字やスペースに変えたらnull以外の判定にも使えます。
また、条件論理 OR 演算子(||)を使って複数条件の指定もできますが、可読性や処理漏れの恐れがある点からあまりおすすめはできません。このような場合は、String.IsNullOrEmptyやString.IsNullOrWhiteSpaceを使ったほうがいいでしょう。
// ==演算子でnull、空文字を判定
if(str == null || str == "")
is演算子
次は、is演算子を使った判定方法のサンプルです。
サンプルコード
namespace SampleCode
{
class SampleCode
{
static void Main()
{
string? str = null;
if (str is null)
{
Console.WriteLine("nullです");
}
else
{
Console.WriteLine("nullではありません");
}
Console.ReadKey();
}
}
}
実行結果
nullです
nullのみの判定になる点など、基本的には==演算子と同じです。
is演算子の利点としては、オーバーロードにより処理が変わる可能性がないという点が挙げられます。
今回解説しているstring型では関係ありませんが、自作クラスのnull判定などでは==演算子より安全に使えるメリットがあります。
String.IsNullOrEmpty
String.IsNullOrEmptyメソッドを使えば、nullと空文字をまとめて判定できます。
サンプルコード
namespace SampleCode
{
class SampleCode
{
static void Main()
{
string? str = null;
if (String.IsNullOrEmpty(str))
{
Console.WriteLine("nullか空文字です");
}
else
{
Console.WriteLine("nullと空文字ではありません");
}
Console.ReadKey();
}
}
}
実行結果
nullか空文字です
便利なメソッドですが、空白文字(スペース、改行、タブ等)は対象外になっていますので注意しましょう。
String.IsNullOrWhiteSpace
String.IsNullOrWhiteSpaceメソッドは、nullと空文字と空白文字(スペース、改行、タブ等)をまとめてチェックできます。
サンプルコード
namespace SampleCode
{
class SampleCode
{
static void Main()
{
string? str = null;
if (String.IsNullOrWhiteSpace(str))
{
Console.WriteLine("nullか空文字かスペースです");
}
else
{
Console.WriteLine("nullと空文字とスペースではありません");
}
Console.ReadKey();
}
}
}
実行結果
nullか空文字かスペースです
空白文字に関しては、連続していた場合でもtrueを返します。
ユーザー入力でスペースのみの入力を無効として弾きたい時などに使うと便利です。
逆に、空白文字のみの入力も受け付けたい場合は使わないようにしましょう。
null合体演算子
最後に紹介するのは、null合体演算子(??)を使った方法です。
サンプルコード
namespace SampleCode
{
class SampleCode
{
static void Main()
{
string? str = null;
str = str ?? "nullです";
Console.WriteLine(str);
Console.ReadKey();
}
}
}
実行結果
nullです
null合体演算子(??)は、左辺の値がnullでなかった時には左辺の値を返し、nullであれば右辺の値を返します。
サンプルの場合、strがnullなので”nullです”が出力される結果となりました。逆にstrがnull以外であれば、strの内容がそのまま出力されます。
nullの時にデフォルト値を入れるような処理に使うと良いでしょう。
なお、今回のコードは下記のようにも記述できます。
str ??= "nullです";
まとめ
以下は当記事のまとめです!
- nullのみの判定であれば、==演算子、is演算子、null合体演算子を使うと良い。
- null以外も判定したい場合は、String.IsNullOrEmptyメソッドやString.IsNullOrWhiteSpaceメソッドを使うと便利。
場面や状況に応じて、適切なnull判定を行いましょう!
コメント