2013-04-24 21 views
0

我今天正在與同事討論VB .NET和C#之間的一些區別。他指出,& &充當位運算符,而VB.NET的AND並不總是這樣做。爲了演示我們鍵入了一些代碼,並用VB這應該工作,但沒有。如何製作VB .NET並充當&&

Dim a As Draw.Bitmap 
Dim b As Draw.Bitmap 
If (Not a Is Nothing) And (Not b Is Nothing) Then MsgBox("bang") 
' in the above example both NOTs cause the "true" statement to become false, it should  
'trigger the Msgbox 

我試圖想出一種方法來使上述聲明「工作」。 ANDALSO沒有爲我工作。

+1

你的例子真的不清楚。 「不是沒有」是錯誤的,那麼爲什麼你會期望它們都是錯誤的,意味着你得到了消息框?什麼是您試圖在VB中模擬的等效C#代碼? – 2013-04-24 16:42:30

+0

在上面的例子中,MSGBOX應該觸發和正在評估 阿是Nothing =真,但NOT'ed使得FALSE B是沒有什麼=真,但NOT'ed使得FALSE 因此,假和錯應該觸發MSGBOX,但它不是。 – mlw4428 2013-04-24 16:53:01

+1

不...假和假評估爲假。所以和比較失敗。只有在**兩個**評估返回true時才返回true。 – Tim 2013-04-24 16:54:07

回答

0

要做到這一點,唯一的方法是修改邏輯來測試兩個實例,如果你需要檢查兩者是否都是某種東西或者兩者都不是。

試試這個例子:

Dim oStart As New Object 
Dim oStop As New Object 

If (oStart IsNot Nothing) And (oStop IsNot Nothing) Then 
    MessageBox.Show("Result1") 
ElseIf (oStart Is Nothing) And (oStop Is Nothing) Then 
    MessageBox.Show("Result2") 
End If 

當你運行這個你應該看到一個消息框,顯示Result1。現在,如果你要改變的聲明這樣:

Dim oStart As Object 
Dim oStop As New Object 

,反之亦然,那麼你將不會看到任何消息框,因爲兩種情況都不是真實的。

如果然後更改聲明:

Dim oStart As Object 
Dim oStop As Object 

然後,你應該看到一個消息框,顯示Result2

發生這種情況的原因是邏輯AND只有在等式兩邊都爲真時纔會返回true。爲了完成上面要做的事情,測試雙方是否是某種東西或者什麼都不是,那麼您需要進行兩次檢查,確保AND的兩側結果爲真。