I C# finns den här möjligheten direkt inbyggd, men jag har inte fått det att fungera i VB. Jaha, har jag tänkt och sedan gjort på det gamla sättet. Men idag snubblade jag över de två kommandona
AndAlso och
OrElse vilken ger VB samma funktionalitet som C#.
Vad menar jag med kortslutning?
Om man i C# skriver en if-sats som innehåller flera villkor och det första villkoret blir fel så körs inga tester på de efterföljande villkoren.
class Class1
{
static void Main(string[] args)
{
if(TestA() == 13 && TestB() == 20)
Console.WriteLine("Yes");
else
Console.WriteLine("No");
Console.ReadLine();
}
static int TestA()
{
return 12;
}
static int TestB()
{
return 20;
}
}
If-satsen i det här exemplet kontrollerar först om funktionen TestA returnerar 13, om detta är sant så kontrollerar den om TestB returnerar 20. TestB kommer aldrig att köras, eftersom TestA returnerar 12 och inte 13.
I VB skulle båda dessa villkort köras även om det första är falskt. Men om man istället för And och Or använder sig av AndAlso och OrElse får man samma funktionalitet.
Ett bra exempel på en mycket nyttigt användningsområde för detta är om man i samma if-sats vill först se om ett objekt är initialiserat och sedan hämta ett värde ifrån ett av objektets egenskaper.
Sub Main()
Dim o As Rupert
If (Not o Is Nothing AndAlso o.age = 12) Then
Console.Write("Yes")
Else
Console.Write("No")
End If
Console.ReadLine()
End Sub
Class Rupert
Public age As Integer
End Class
Här kontrollers först att objektet o är initialiserat, om det är detta kontrolleras om egenskapen age är 12.
Recent Comments