Jämförelseoperatorer (Visual Basic)
Följande är jämförelseoperatorerna som definierats i Visual Basic.
<
Operatör
<=
Operatör
>
Operatör
>=
Operatör
=
Operatör
<>
Operatör
Dessa operatorer jämför två uttryck för att avgöra om de är lika, och om inte, hur de skiljer sig åt. Is
, IsNot
och Like
beskrivs i detalj på separata hjälpsidor. Relationsjämförelseoperatorerna beskrivs i detalj på den här sidan.
Syntax
result = expression1 comparisonoperator expression2
result = object1 [Is | IsNot] object2
result = string Like pattern
Delar
result
Obligatoriska. Ett Boolean
värde som representerar resultatet av jämförelsen.
expression1
, expression2
Obligatoriska. Alla uttryck.
comparisonoperator
Obligatoriska. Alla relationsjämförelseoperatorer.
object1
, object2
Obligatoriska. Alla namn på referensobjekt.
string
Obligatoriska. Alla String
uttryck.
pattern
Obligatoriska. Alla String
uttryck eller teckenintervall.
Kommentarer
Följande tabell innehåller en lista över relationsjämförelseoperatorerna och de villkor som avgör om result
är True
eller False
.
Operator | True Om |
False Om |
---|---|---|
< (Mindre än) |
expression1 < expression2 |
expression1 >= expression2 |
<= (Mindre än eller lika med) |
expression1 <= expression2 |
expression1 > expression2 |
> (Större än) |
expression1 > expression2 |
expression1 <= expression2 |
>= (Större än eller lika med) |
expression1 >= expression2 |
expression1 < expression2 |
= (Lika med) |
expression1 = expression2 |
expression1 <> expression2 |
<> (Inte lika med) |
expression1 <> expression2 |
expression1 = expression2 |
Operatorn Is
, operatorn IsNot
och operatorn Like
har specifika jämförelsefunktioner som skiljer sig från operatorerna i föregående tabell.
Jämföra tal
När du jämför ett uttryck av typen Single
med en av typen Double
Single
konverteras uttrycket till Double
. Det här beteendet är motsatsen till det beteende som finns i Visual Basic 6.
På samma sätt konverteras uttrycket till eller när du jämför ett uttryck av typen Decimal
med ett uttryck av typen Single
eller Double
Decimal
Double
.Single
För Decimal
uttryck kan eventuella bråkvärden som är mindre än 1E-28 gå förlorade. En sådan delvärdeförlust kan orsaka att två värden jämförs som lika när de inte är det. Därför bör du vara försiktig när du använder likhet (=
) för att jämföra två flyttalsvariabler. Det är säkrare att testa om det absoluta värdet för skillnaden mellan de två talen är mindre än en liten acceptabel tolerans.
Flyttalsimprecision
När du arbetar med flyttalsnummer bör du tänka på att de inte alltid har en exakt representation i minnet. Detta kan leda till oväntade resultat från vissa åtgärder, till exempel värdejämförelse och Mod-operatorn. Mer information finns i Felsöka datatyper.
Jämföra strängar
När du jämför strängar utvärderas stränguttrycken baserat på deras alfabetiska sorteringsordning, vilket beror på inställningen Option Compare
.
Option Compare Binary
baser strängjämförelser på en sorteringsordning som härleds från de interna binära representationerna av tecknen. Sorteringsordningen bestäms av kodsidan. I följande exempel visas en typisk binär sorteringsordning.
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Option Compare Text
baserar strängjämförelser på en skiftlägeskänslig, textbaserad sorteringsordning som bestäms av programmets nationella inställningar. När du anger Option Compare Text
och sorterar tecknen i föregående exempel gäller följande sorteringsordning för text:
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
Nationella beroenden
När du anger Option Compare Text
kan resultatet av en strängjämförelse bero på vilket språk som programmet körs i. Två tecken kan jämföras som lika med i ett språk, men inte i ett annat. Om du använder en strängjämförelse för att fatta viktiga beslut, till exempel om du vill acceptera ett försök att logga in, bör du vara uppmärksam på språkkänslighet. Överväg att antingen ange Option Compare Binary
eller anropa StrComp, som tar hänsyn till nationella inställningar.
Typlös programmering med relationsjämförelseoperatorer
Användning av relationsjämförelseoperatorer med Object
uttryck tillåts inte under Option Strict On
. När Option Strict
är Off
, och antingen expression1
eller expression2
är ett Object
uttryck, avgör körningstyperna hur de jämförs. I följande tabell visas hur uttrycken jämförs och resultatet från jämförelsen, beroende på operandernas körningstyp.
Om operander är | Jämförelse är |
---|---|
Både String |
Sorteringsjämförelse baserat på strängsorteringsegenskaper. |
Båda numeriska | Objekt som konverterats till Double , numerisk jämförelse. |
Ett numeriskt och ett String |
String Konverteras till en Double och numerisk jämförelse utförs. Om det String inte går att konvertera till Double genereras en InvalidCastException . |
Antingen eller båda är andra referenstyper än String |
En InvalidCastException kastas. |
Numeriska jämförelser behandlas Nothing
som 0. Strängjämförelser behandlas Nothing
som ""
(en tom sträng).
Överbelastning
Relationsjämförelseoperatorerna (. , , , , ) kan överbelastas, vilket innebär att en klass eller struktur kan omdefiniera sitt beteende när en operande har den typen av klass eller struktur. <>
=
>=
>
<=
<
Om din kod använder någon av dessa operatorer i en sådan klass eller struktur, se till att du förstår det omdefinierade beteendet. Mer information finns i Operatorprocedurer.
Observera att = operatorn endast kan överbelastas som en relationsjämförelseoperator, inte som en tilldelningsoperator.
Exempel
I följande exempel visas olika användningar av relationsjämförelseoperatorer, som du använder för att jämföra uttryck. Relationsjämförelseoperatorer returnerar ett Boolean
resultat som representerar om det angivna uttrycket utvärderas till True
. När du använder operatorerna >
och <
på strängar görs jämförelsen med hjälp av strängernas normala alfabetiska sorteringsordning. Den här ordningen kan vara beroende av nationella inställningar. Om sorteringen är skiftlägeskänslig eller inte beror på inställningen Alternativjäsning .
Dim x As testClass
Dim y As New testClass()
x = y
If x Is y Then
' Insert code to run if x and y point to the same instance.
End If
I föregående exempel returnerar False
den första jämförelsen och återstående jämförelser returnerar True
.