ここでは、基本中の基本になりますが、文字列のnullとstring.Emptyについてのおさらいです。何度も同じ間違いを犯しているために残しておくことにしました。
ヘッポコですので、「えー、今更こんなことー」と思われるかもしれませんが、まいど間違えます。なぜか、デバッグのためのコードがバグっているということがよくあります。
スポンサーリンク
文字列のnullとstring.Emptyを比較する
string.Emptyはいわゆるダブルコーテーションでくくっただけの空文字列と同じことです。なので以下の文字列比較は真になります。
string str = string.Empty; if (str == "") { Console.WriteLine("True"); // True が出力される }
string.Emptyとnullを比較すると、以下の文字列の比較は真となります。別物として認識されていることがわかります。
string str1 = string.Empty; string str2 = null; if (str1 != str2) { Console.WriteLine("True"); // True が出力される }
とくに必要がなのは、文字列を宣言しただけの状態では初期値はnullになっているということです。上記のようなコードではコンパイラがエラー出力してくれますが、あるクラスに宣言された文字列(初期値null)などまではコンパイラーはエラーとは見なしてくれません。
文字列のnullとstring.Emptyを同等に処理する
実際のプログラムではnullだろうと、string.Emptyだろうと同じに扱うことが多いかと思います。この点についてはご意見のある方もいらっしゃる方もおられるかもしれませんが、ここでは特に意識しません。
nullとstring.Emptyは同じとして扱うには、string.IsNullOrEmpty関数を使用します。下記のサンプルコードをご確認ください。
string str1 = null; string str2 = string.Empty; if (string.IsNullOrEmpty(str1)) { Console.WriteLine("True"); } // True if (string.IsNullOrEmpty(str2)) { Console.WriteLine("True"); } // True
この関数を使用することで、nullとstring.Emptyのいずれかであることが判断することができます。
個人的には文字列をあつかうので、nullで初期化されずにstring.Emptyで初期化してくれたほうがよかったーーって思います。「データベースの値はどうあつかうんだよ」などあるかとおもいますけどね。
しかし、なんどこの件で悩んだことか。。。ヘッポコの上いまではポンコツです。いいとこありません。