VB.NET短路判斷問題解析
我們在做VB.NET短路判斷的時候,出現(xiàn)了一些錯誤。在這里我們就來進行一個VB.NET短路判斷的錯誤解決方法,希望對大家有所幫助。在用VB6制作程序中書寫IF文的時候,一般都要把返回布爾函數(shù)的判斷分成幾塊來寫。因為VB6不支持短路的判斷結果。#t#
可是到了.NET的時代,C#與VB.NET都是基于.NET Framework的,于是就想當然的以為VB.NET會很聰明的改變了AND的式樣與C#中的&&等同了(其他的邏輯也一樣)。
今天剛好有機會評價一位同仁的程序,我的TRACE總是在不該出現(xiàn)的時候出現(xiàn),經(jīng)過測試得到了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
執(zhí)行結果:
- 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;
- }
- }
- }
執(zhí)行結果:
- PA
- FALSE
VB.NET短路判斷的執(zhí)行結果:
- 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
執(zhí)行結果:
- PA
- PB
- FALSE
這樣很明顯就可以得到結論了。
于是就只好馬上看看VB.NET的AND運算的幫助,證實了我的想法,并且?guī)椭募线€給了這樣一個詞的參照,AndAlso。
原來如此......
在VB.NET短路判斷中與C#的&&等價的是AndAlso!
以前雖然有機會用一些C# To VB.NET的工具,可是就是沒有注意到這點。實在是夠失敗。
另: 還有一個新的關鍵字,OrElse。