显然,这曾经是VB6和VBA短路并执行第一个真实情况的一种方式:
Select Case True
End Select
Run Code Online (Sandbox Code Playgroud)
这仍然在使用(VB.NET)?
Cha*_*rch 29
通常使用此语法而不是If...ElseIf
语句.有些人发现它更容易阅读.例如:
Select Case True
Case testVariable < 0
Console.Write("You must supply a positive value.")
Case testVariable > 10
Console.Write("Please enter a number from 0-10.")
Case True
Call DoWork(testVariable)
End Select
Run Code Online (Sandbox Code Playgroud)
答案是肯定的,这仍然适用于VB.NET.在使用它时要小心,因为它不是"标准编程结构",对于将来必须维护代码的人来说可能不熟悉.
Pat*_*ald 13
我不确定这个结构如何提供以下优势:
If testVariable < 0 Then
Console.Write("You must supply a positive value.")
ElseIf testVariable > 10 Then
Console.Write("Please enter a number less than 10.")
Else
Call DoWork(testVariable)
End If
Run Code Online (Sandbox Code Playgroud)
上面的结构是短路的,我不必尝试弄清楚它的作用,因为它是一个标准结构.
Rol*_*ble 11
其他人已经回答了这个实际问题,但我只是想说明我经常使用这个结构.我认为它通常是同时测试两个布尔条件的最可读方式:
Dim A As Boolean
Dim B As Boolean
'
'do stuff to set values of A and B
'
Select Case True
Case A And B
'something
Case A And Not B
'something else
Case Not A And B
'you get the picture
Case Else
'...
End Select
Run Code Online (Sandbox Code Playgroud)
我承认,为什么我发现它易于阅读的部分原因是我确实使用它,并且我确实记得在我第一次看到它时必须解析它 - 但是一旦成功解析,我的反应是"那太棒了!"
关于这个主题存在很多困惑,但要回答OP问题:是的,VB.Net中的逻辑评估与VB6中的逻辑评估相同,就像在VBA中一样.http://support.microsoft.com/kb/817250
要利用Select Case优化技术,您可以使用Select Cases固有语法来避免使用逻辑运算符和Or,Xor等.这些运算符确实具有短路评估功能.
考虑这个例子:
Public Sub Example()
If A Or B Then
Beep
End If
Select Case True
Case A, B
Beep
End Select
End Sub
Private Function A() As Boolean
Debug.Print "A Ran"
A = True
End Function
Private Function B() As Boolean
Debug.Print "B Ran"
B = False
End Function
Run Code Online (Sandbox Code Playgroud)
Select Case版本只运行A. If-Block将同时运行.这不是If语句的错,而是And运算符的错误.如果您愿意,可以将If语句结构化为短路,如下所示:
Public Sub Example2()
If A Then
ElseIf B Then
Beep
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
B不会跑.这只是一种风格问题.
重要的是要知道你要避免的是And/Or/Xor运算符而不是If-Blocks.如果您喜欢If-Block的Select Case版本更好...更多功能给你:)
归档时间: |
|
查看次数: |
27375 次 |
最近记录: |