2009-10-08 72 views
0

我有一個驗證數據的IF語句。IF語句的優先級部分

基本上是這樣的:

Dim s As String = Nothing 

If s Is Nothing Or s.Length = 0 Then 
    Console.WriteLine("Please enter a value") 
End If 

Console.Read() 

我想檢查,看看沒什麼第一,因爲如果我這樣寫,它拋出一個NullReferenceException。

我想重新寫這樣的:

If s Is Nothing Then 
    Console.WriteLine("Please enter a value") 
ElseIf s.Length = 0 Then 
    Console.WriteLine("Please enter a value") 
End If 

但如果我這樣做,我得到了相同的錯誤消息兩次,我相信這是不太清楚我的意圖是什麼。

我也試過在Is Nothing子句中引入括號,但它不起作用。

是否有一個優雅的測試對象是什麼,然後測試它的屬性?

回答

7

.NET 2.0引入了OrElse關鍵字來做短路。這意味着如果左側爲真,它將不會評估OrElse的右側。除此之外,它的功能與Or完全相同。

And等效爲AndAlso,如果左側爲假,則不會評估右側。

Dim s As String = Nothing 

If s Is Nothing OrElse s.Length = 0 Then 
    Console.WriteLine("Please enter a value") 
End If 

Console.Read() 

應該做你想做的。

+0

真。但是,這並不能解釋爲什麼他的第二個代碼也拋出了NullReference異常。在對這個關鍵字的無知中,他的第二個代碼應該是一個有效的解決方法。 –

+0

@Daniel Daranas:嗯,那是真的。我想我只是不能包裹我的頭是無返回NullReferenceException。 – Powerlord

+0

哎呀,我想我誤解了OP說的話。他說他「兩次得到相同的錯誤信息」,可能是指「請輸入一個值」。 –

4

你可以使用:

if (string.IsNullOrEmpty(s)) 
{ 
//do work 
} 
+0

我沒有想到那個。接得好。 – Powerlord

+0

是的,這是一個不錯的方法,使代碼看起來更清潔...當然只是要工作的字符串.... – CSharpAtl

+0

@CSharpAtl:是的,但它更清楚地表達意圖,並檢查它是否是字符串。空啓動。 – Powerlord