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

9,0
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.

9,0

Ä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.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow