2012-10-30 13 views
7

Dlaczego następujące kompilacje w VB.NET nie są kompilowane?Jak korzystać z IsNullOrEmpty w VB.NET?

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

Kompilator mówi: 'Argument nie określony dla parametru 'wartość' z 'Public Shared IsNullOrEmpty Function (value As String) As Boolean' . ", więc można się domyślić, że to dlatego, że nie podano argumentu dla parametru" value "tej metody. Chcę powiedzieć, że (przez większość czasu) kompilator powie ci, co jest nie tak z twoim kodem. – sloth

Odpowiedz

23

IsNullOrEmpty jest 'wspólne', więc należy używać go w ten sposób:

If String.IsNullOrEmpty(strTest) Then 
3

String.IsNullOrEmpty jest metodą wspólny (lub statyczny, w C#).

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

Kiedy to robię, mówi, że w środowisku wykonawczym można podnieść wyjątek NullPointerException. – CJ7

+1

@ CJ7 To dlatego, że używasz 'strTest' bez ustawiania wartości (co * mogło * być błędem), więc zawsze jest to' Nothing'. Możesz obejść go, używając 'Dim strTest As String = Nothing' np. jawnie ustawić na "Nic". – sloth

+0

@ Mr.Steak: wydaje się to trochę dziwne, ponieważ jeśli nie ustawię go na nic, to i tak będzie "Nic". Dlaczego powinienem jawnie ustawić go na "Nic" - nie ma sensu! – CJ7

6

Rzeczywiście można tylko porównać do pustej wyrażenie:

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

Co jeśli 'strTest' to' nic '? 'IsNullOrEmpty' jawnie zawiera sprawdzenie, czy' strTest' jest 'nic'. Twoje oświadczenie nie sprawdza tego. –

+5

W rzeczywistości robi to, porównywanie ciągów znaków z pustym ciągiem zwróci true dla Nothing też w VB. Wypróbuj, jeśli mi nie wierzysz. A może to cię przekonuje: http://stackoverflow.com/questions/2633166/nothing-string-empty-why-are-these-equal –

+0

+1 @ThorstenDittmar, Rolf ma rację. VB.Net traktuje 'Nic' jako identyczne' '" 'podczas porównywania ciągów (i także w innych miejscach). – MarkJ