在我们的一个类中找到了这段代码,但我不理解第一个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