2012-10-30 4 views
7

なぜVB.NETで以下のコンパイルが行われませんか?VB.NETでIsNullOrEmptyを使用するには?

If String.IsNullOrEmpty(strTest) Then 
+0

:の '引数パラメータに指定されていない「の値」「公共の共有機能IsNullOrEmpty(文字列値)ブールとして」あなたがそのメソッドのパラメータ 'value'の引数を指定しなかったためです。私が言うことは、コンパイラがあなたのコードに何が間違っているかを伝えることです(ほとんどの場合)。 – sloth

答えて

23

IsNullOrEmptyを '共有' されます。

Dim strTest As String 
If (String.IsNullOrEmpty(strTest)) Then 
    MessageBox.Show("NULL OR EMPTY") 
End if 
3

String.IsNullOrEmptyは(C#で、または静的)共有の方法であって、あなたがそのように使用する必要がありますので

Dim strTest As String 
If (strTest.IsNullOrEmpty) Then 
    MessageBox.Show("NULL OR EMPTY") 
End if 
+0

これを実行すると、実行時にNullPointerExceptionが発生する可能性があることがわかります。 – CJ7

+1

@ CJ7これは、値を設定せずに 'strTest'を使うためです(間違いかもしれません)ので、常に' Nothing'です。あなたは 'Dim strTest As String = Nothing'を使ってそれを回避することができます。明示的に 'Nothing'に設定します。 – sloth

+0

@ Mr.Steak:ちょっと変わっていると思います。もし私が何かに設定しなければ、とにかく何もないでしょう。明示的に 'Nothing'に設定しなければならないのはなぜですか?何の意味もありません! – CJ7

6

あなたは実際には空の文字列に比較することができます:コンパイラは言う

If strTest = "" Then 
    MessageBox.Show("NULL OR EMPTY") 
End If 
+0

'strTest'が' nothing'の場合はどうなりますか? 'IsNullOrEmpty'は' strTest'が 'nothing'かどうかのチェックを明示的に含みます。あなたの声明はこれをチェックしません。 –

+5

実際には、空の文字列との文字列比較はVBではNothingもtrueを返します。あなたが私を信じないなら、それを試してみてください。または、これはあなたに確信しているかもしれません:http://stackoverflow.com/questions/2633166/nothing-string-empty-why-are-these-equal –

+0

+1 @ThorstenDittmar、Rolfはこの1つです。 VB.Netは、文字列の比較を行うとき(そして他の場所でも) 'Nothing'を同じ' '"と扱います。 – MarkJ

関連する問題