在我們的一個類中找到了這段代碼,但我不理解第一個case語句在做什麼:「case i = 1」。我確信某人只是錯誤地將其從IF/ELSE語句轉換而來,但爲什麼VB.NET允許這種語法。這是什麼意思?VB.NET中的奇怪案例陳述=
Dim i As Integer = 1
Select Case i
Case i = 1
Return True
Case Else
Return False
End Select
在我們的一個類中找到了這段代碼,但我不理解第一個case語句在做什麼:「case i = 1」。我確信某人只是錯誤地將其從IF/ELSE語句轉換而來,但爲什麼VB.NET允許這種語法。這是什麼意思?VB.NET中的奇怪案例陳述=
Dim i As Integer = 1
Select Case i
Case i = 1
Return True
Case Else
Return False
End Select
在短碼被有效地做在下面的
If i = (i = 1) Then
Return True
Else
Return False
End If
的Case
表達一個VB.Net Select .. Case
聲明有三種不同的形式。
這個例子是Case
運營商的第3版本。隱式地,編譯器將爲Case
語句評估表達式testExpr = expr
。在這種情況下,(哈哈),它出來到i = (i = 1)
注意:當運行條件實際上會評估爲false,因此else塊將被運行。之所以被表達實際上評價爲
i = CInt(i = 1)
的i = 1
部將評估爲True
並且由於從VB6(和COM的版本的TRUE
)遺留原因CInt(True)
部將計算爲-1
,因此比較將失敗。
我認爲=是在VB的過載操作者
它進一步論述:vb = operator
Case
語句可以採取任何可以隱式轉換爲Select
語句中值的類型的表達式。
表達i = 1
將被評估,以任一True
或False
,然後將其轉換爲一個整數值,並與i
。
整數值True
爲-1
,所以i = 1
永遠不會等於i
。無論i
的值如何,該情況都不會被使用。
i = 1將爲真,但CInt(真)= -1。如果我將我的聲明更改爲「Dim i as Integer = -1」,那麼根據您的解釋,它應該返回True。它沒有。 – Denis 2011-04-06 21:13:18
好的,看着修改後的解釋。所以我跟着你,「True的整數值是-1」,但是我失去了你,「所以i = 1永遠不會等於i」。這是爲什麼? – Denis 2011-04-06 21:16:41
@Denis:如果'i'是'-1',那麼表達式'i = 1'就是'False',它被轉換爲'0',所以它不等於'i'。對於'i',沒有任何值等於'i = 1'。 – Guffa 2011-04-06 21:18:33
這可能是一個錯誤。它應該是,
Dim i As Integer = 1
Select Case True
Case i = 1
Return True
Case Else
Return False
End Select
這很奇怪。我猜想用「return true」替換它。 – asawyer 2011-04-06 20:56:49
asawyer,當然這不是真正的代碼。這是我的代碼jist的簡化版本。並不是真正想要如何改寫它。試圖理解這種書寫方式的含義。 – Denis 2011-04-06 21:00:50
我不知道在源代碼控制中,並詢問誰檢查了它?就目前而言,它根本沒有多少意義。 – asawyer 2011-04-06 21:01:56