在我们的一个类中找到此代码,但我不理解第一个case语句正在做什么:“Case i = 1”。我确信有人只是错误地将其转换为IF / ELSE语句,但为什么VB.NET允许这种语法。用这种方式写的是什么意思?
Dim i As Integer = 1
Select Case i
Case i = 1
Return True
Case Else
Return False
End Select
答案 0 :(得分:5)
Case
语句可以使用任何可隐式转换为Select
语句中值类型的表达式。
表达式i = 1
将评估为True
或False
,然后将其转换为整数值并与i
进行比较。
True
的整数值为-1
,因此i = 1
永远不会等于i
。无论i
的值如何,都不会使用该案例。
答案 1 :(得分:4)
简而言之,代码正在有效地执行以下操作
If i = (i = 1) Then
Return True
Else
Return False
End If
VB.Net Case
语句中的Select .. Case
表达式有3种不同的形式。
此示例是Case
运算符的第3个版本。隐式编译器将为testExpr = expr
语句计算表达式Case
。在这种情况下(哈哈),它出现在i = (i = 1)
注意:运行条件时,实际上会将其计算为false,因此将运行else块。之所以表达式实际上被评估为
i = CInt(i = 1)
i = 1
部分将评估为True
,由于VB6的遗留原因(以及COM的TRUE
版本),CInt(True)
部分将评估为-1
因此比较将失败。
答案 2 :(得分:1)
使用Option Strict
,您将看到编译错误
上面发布的代码隐式转换为整数到布尔&结果将是False
。
编辑:您的代码将成为
if 1 = (i = 1) then
到
if 1 = (true) then
答案 3 :(得分:-1)
耸肩我们的原因不是为什么,我们只是为了简化。
Return True
答案 4 :(得分:-1)
我认为=是vb中的重载运算符
这里进一步讨论:vb = operator
答案 5 :(得分:-1)
这可能是一个错误。它应该是,
Dim i As Integer = 1
Select Case True
Case i = 1
Return True
Case Else
Return False
End Select