今回は、VB.NETでNullか文字列を判定する方法についてご紹介します。
VB.NETでNullを判定する方法
VB.NETでは、変数がNothing(=null)かどうかを判定する際に、Is Nothing 演算子を利用します。
以下のコードでは、文字列型の変数strがNothingかをチェックし、Nothingの場合にメッセージを表示します。
| 1 2 3 4 5 6 7 8 9 10 11 | Module Module1     Sub Main()         ' 変数をNothingで初期化         Dim str As String = Nothing         ' Nothing判定         If str Is Nothing Then             Console.WriteLine("strはNothingです。")         End If     End Sub End Module | 
strはNothingです。
この方法では、変数が参照を持っていない状態を簡単にチェックできます。
また、IsNot Nothingを使うことで、逆にNothingではないことを判定できます。
文字列の空文字・空白・型を判定する方法
文字列の中身を判定する際、以下のような方法があります。
- String.IsNullOrEmpty: 変数がNothingまたは空文字かどうかを判定
- String.IsNullOrWhiteSpace: 上記に加えて、空白のみの文字列も同時に判定
- TypeOf ~ Is String: 変数が文字列型かどうかを判定
String.IsNullOrEmptyを使った判定
次のコードでは、String.IsNullOrEmptyで空文字やNothingの両方をチェックしています。
| 1 2 3 4 5 6 7 8 9 10 11 | Module Module2     Sub Main()         ' 空文字で初期化         Dim str As String = ""         ' Nothingまたは空文字かどうかを判定         If String.IsNullOrEmpty(str) Then             Console.WriteLine("strはNothingまたは空文字です。")         End If     End Sub End Module | 
strはNothingまたは空文字です。
String.IsNullOrWhiteSpaceを使った判定
String.IsNullOrWhiteSpaceは、空白だけの文字列も検出したい場合に便利です。
| 1 2 3 4 5 6 7 8 9 10 11 | Module Module3     Sub Main()         ' 空白文字だけで初期化         Dim str As String = "   "         ' Nothing、空文字、空白文字のみかどうかを判定         If String.IsNullOrWhiteSpace(str) Then             Console.WriteLine("strはNothing、空文字、または空白のみです。")         End If     End Sub End Module | 
strはNothing、空文字、または空白のみです。
TypeOf演算子でオブジェクトが文字列か判定
型が明確でないObject型の変数を扱う場合、TypeOf ~ Is Stringを使うことで文字列かどうかを確認できます。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Module Module4     Sub Main()         ' Object型変数に文字列を代入         Dim obj As Object = "これは文字列です。"         ' Nothingではないことを先にチェックし、TypeOfで型を確認         If obj IsNot Nothing AndAlso TypeOf obj Is String Then             Dim validString As String = CType(obj, String)             Console.WriteLine("objは文字列です: " & validString)         Else             Console.WriteLine("objは文字列ではありません。")         End If     End Sub End Module | 
objは文字列です: これは文字列です。
データベースのDBNullチェック
データベースから取得した値は、DBNull.Valueとして返される場合があります。
この場合は、Convert.IsDBNullなどを使用して判定します。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | Module Module5     Sub Main()         ' データベースから取得した値を想定         Dim dbValue As Object = DBNull.Value         ' DBNullチェック         If Convert.IsDBNull(dbValue) Then             Console.WriteLine("dbValueはDBNullです。")         ElseIf TypeOf dbValue Is String Then             Console.WriteLine("dbValueは文字列です: " & CType(dbValue, String))         End If     End Sub End Module | 
dbValueはDBNullです。
まとめ
VB.NETでNullか文字列かを判定するには、NothingやDBNullの違いをしっかり把握することが大切です。
文字列の中身を検査するには、String.IsNullOrEmptyやString.IsNullOrWhiteSpaceを活用すると便利です。
Object型を扱う場合はTypeOf演算子で型をチェックし、エラーを回避しながら安全なキャストを行います。
