Visual Basic .NET Language
Betingelser
Sök…
Om då annars
Dim count As Integer = 0
Dim message As String
If count = 0 Then
message = "There are no items."
ElseIf count = 1 Then
message = "There is 1 item."
Else
message = "There are " & count & " items."
End If
Om operatör
If(condition > value, "True", "False")
Vi kan använda If- operatören istället för If ... Sedan ... Annars..End Om uttalande blockeras.
Tänk på följande exempel:
If 10 > 9 Then
MsgBox("True")
Else
MsgBox("False")
End If
är det samma som
MsgBox(If(10 > 9, "True", "False"))
If()
använder kortslutningsutvärdering , vilket innebär att den bara kommer att utvärdera de argument som den använder. Om villkoret är falskt (eller en Nullable
som är Nothing
) kommer det första alternativet inte att utvärderas alls, och ingen av dess biverkningar kommer att observeras. Detta är faktiskt samma som C #: s ternära operatör i form av condition?a:b
.
Detta är särskilt användbart för att undvika undantag:
Dim z As Integer = If(x = 0, 0, y/x)
Vi vet alla att att dela med noll kommer att kasta ett undantag, men If()
här skyddar detta genom att kortsluta endast det uttryck som villkoret redan har säkerställt är giltigt.
Ett annat exempel:
Dim varDate as DateTime = If(varString <> "N/A", Convert.ToDateTime(varString), Now.Date)
Om varString <> "N/A"
utvärderar till False
tilldelar det varDate
värde som Now.Date
utan att utvärdera det första uttrycket.
Äldre versioner av VB har inte If()
-operatören och måste IIf()
med den IIf()
-funktionen. Eftersom det är en funktion, inte en operatör, det gör det inte kortslutning; alla uttryck utvärderas med alla möjliga biverkningar, inklusive prestationsstraff, ändra tillstånd och kasta undantag. (Båda ovanstående exempel som undviker undantag skulle kasta om de konverteras till IIf
.) Om någon av dessa biverkningar ger upphov till ett problem, finns det inget sätt att använda en inline villkorad; i stället, lita på If..Then
blockerar som vanligt.