我们在做VB.NET短路判断的时候,出现了一些错误。在这里我们就来进行一个VB.NET短路判断的错误解决方法,希望对大家有所帮助。在用VB6制作程序中书写IF文的时候,一般都要把返回布尔函数的判断分成几块来写。因为VB6不支持短路的判断结果。#t#
可是到了.NET的时代,C#与VB.NET都是基于.NET Framework的,于是就想当然的以为VB.NET会很聪明的改变了AND的式样与C#中的&&等同了(其他的逻辑也一样)。
今天刚好有机会评价一位同仁的程序,我的TRACE总是在不该出现的时候出现,经过测试得到了VB.NET短路判断的AND与VB6的AND相同的结论。
VB6的测试程序: Option Explicit
- Private Sub Command1_Click()
- If PA And PB Then
- Debug.Print "TRUE"
- Else
- Debug.Print "FALSE"
- End If
- End Sub
- Private Function PA() As Boolean
- Debug.Print "PA"
- PA = False
- End Function
- Private Function PB() As Boolean
- Debug.Print "PB"
- PB = True
- End Function
执行结果:
- PA
- PB
- FALSE
C#的测试程序:
- using System;
- namespace DefaultNamespace
- {
- class MainClass
- {
- public static void Main(string[] args)
- {
- if ( PA() && PB() )
- {
- Console.WriteLine("TRUE");
- }
- else
- {
- Console.WriteLine("FALSE");
- }
- }
- public static bool PA()
- {
- Console.WriteLine("PA");
- return false;
- }
- public static bool PB()
- {
- Console.WriteLine("PB");
- return true;
- }
- }
- }
执行结果:
- PA
- FALSE
VB.NET短路判断的执行结果:
- Imports System
- Module MainModule Main
- Sub Main()Sub Main()
- If PA And PB Then
- Console.WriteLine("TRUE")
- Else
- Console.WriteLine("FALSE")
- End If
- End Sub
- Function PA()Function PA()
As Boolean- Console.WriteLine("PA")
- PA = True
- End Function
- Function PB()Function PB()
As Boolean- Console.WriteLine("PB")
- PB = True
- End Function
- End Module
执行结果:
- PA
- PB
- FALSE
这样很明显就可以得到结论了。
于是就只好马上看看VB.NET的AND运算的帮助,证实了我的想法,并且帮助文件上还给了这样一个词的参照,AndAlso。
原来如此......
在VB.NET短路判断中与C#的&&等价的是AndAlso!
以前虽然有机会用一些C# To VB.NET的工具,可是就是没有注意到这点。实在是够失败。
另: 还有一个新的关键字,OrElse。