Operatori di confronto (Visual Basic)
Di seguito sono riportati gli operatori di confronto definiti in Visual Basic.
Operatore <
Operatore <=
Operatore >
Operatore >=
Operatore =
Operatore <>
Questi operatori confrontano due espressioni per determinare se sono uguali o meno e, se non lo sono, come differiscono. Is
, IsNot
e Like
vengono illustrati in dettaglio in pagine della Guida separate. Gli operatori di confronto relazionale sono descritti in dettaglio in questa pagina.
Sintassi
result = expression1 comparisonoperator expression2
result = object1 [Is | IsNot] object2
result = string Like pattern
Parti
result
Obbligatorio. Valore Boolean
che rappresenta il risultato del confronto.
expression1
, expression2
Obbligatorio. Qualsiasi espressione.
comparisonoperator
Obbligatorio. Qualsiasi operatore di confronto relazionale.
object1
, object2
Obbligatorio. Qualsiasi nome di oggetto di riferimento.
string
Obbligatorio. Qualsiasi espressione String
.
pattern
Obbligatorio. Qualsiasi espressione String
o intervallo di caratteri.
Osservazioni:
La tabella seguente contiene un elenco degli operatori di confronto relazionali e le condizioni che determinano se result
è True
o False
.
Operatore | True se |
False se |
---|---|---|
< (minore di) |
expression1 < expression2 |
expression1 >= expression2 |
<= (minore di o uguale a) |
expression1 <= expression2 |
expression1 > expression2 |
> (maggiore di) |
expression1 > expression2 |
expression1 <= expression2 |
>= (maggiore o uguale a) |
expression1 >= expression2 |
expression1 < expression2 |
= (uguale a) |
expression1 = expression2 |
expression1 <> expression2 |
<> (diverso da) |
expression1 <> expression2 |
expression1 = expression2 |
Nota
L'operatore = viene usato anche come operatore di assegnazione.
L'operatore Is
, l'operatore IsNot
e l'operatore Like
hanno funzionalità di confronto specifiche che differiscono dagli operatori nella tabella precedente.
Confronto tra numeri
Quando si confronta un'espressione di tipo Single
con una di tipo Double
, l'espressione Single
viene convertita in Double
. Questo comportamento è opposto a quello trovato in Visual Basic 6.
Analogamente, quando si confronta un'espressione di tipo Decimal
con un'espressione di tipo Single
o Double
, l'espressione Decimal
viene convertita in Single
o Double
. Per le espressioni Decimal
, qualsiasi valore frazionaria minore di 1E-28 potrebbe andare persa. Tale perdita di valori frazionari può causare il confronto di due valori come uguali quando non lo sono. Per questo motivo, è necessario prestare attenzione quando si usa l'uguaglianza (=
) per confrontare due variabili a virgola mobile. È più sicuro verificare se il valore assoluto della differenza tra i due numeri è minore rispetto a una piccola tolleranza accettabile.
Imprecisione a virgola mobile
Quando si lavora con numeri a virgola mobile, tenere presente che non hanno sempre una rappresentazione precisa in memoria. Ciò può causare risultati imprevisti da determinate operazioni, ad esempio il confronto dei valori e l'operatore Mod. Per altre informazioni, vedere Risoluzione dei problemi relativi ai tipi di dati.
Confronto di stringhe
Quando si confrontano stringhe, le espressioni stringa vengono valutate in base al relativo ordinamento alfabetico, che dipende dall'impostazione Option Compare
.
Option Compare Binary
basa i confronti tra stringhe su un ordinamento derivato dalle rappresentazioni binarie interne dei caratteri. L'ordinamento è determinato dalla tabella codici. Nell'esempio seguente viene illustrato un tipico ordinamento binario.
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Option Compare Text
basa i confronti tra stringhe in base a un ordinamento testuale senza distinzione tra maiuscole e minuscole determinato dalle impostazioni locali dell'applicazione. Quando si imposta Option Compare Text
e si ordinano i caratteri nell'esempio precedente, si applica l'ordinamento di testo seguente:
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
Dipendenza dalle impostazioni locali
Quando si imposta Option Compare Text
, il risultato di un confronto tra stringhe può dipendere dalle impostazioni locali in cui è in esecuzione l'applicazione. Due caratteri possono essere confrontati come uguali in una delle impostazioni locali, ma non in un'altra. Se si usa un confronto tra stringhe per prendere decisioni importanti, ad esempio se accettare o meno un tentativo di accesso, si riciverà un avviso sulla riservatezza delle impostazioni locali. Prendere in considerazione l'impostazione Option Compare Binary
o la chiamata a StrComp, che tiene conto delle impostazioni locali.
Programmazione senza tipi con operatori di confronto relazionali
L'uso di operatori di confronto relazionali con espressioni Object
non è consentito in Option Strict On
. Quando Option Strict
è Off
e expression1
o expression2
è un'espressione Object
, i tipi di runtime determinano il modo in cui vengono confrontati. Nella tabella seguente viene illustrato come vengono confrontate le espressioni e il risultato del confronto, a seconda del tipo di runtime degli operandi.
Se gli operandi sono | Il confronto è |
---|---|
Entrambi String |
Confronto di ordinamento basato sulle caratteristiche di ordinamento delle stringhe. |
Entrambi numerici | Oggetti convertiti in Double , confronto numerico. |
Uno numerico e uno String |
L'oggetto String viene convertito in un Double e viene eseguito il confronto numerico. Se String non può essere convertito in Double , viene generata una InvalidCastException. |
Uno o entrambi sono tipi riferimento diversi da String |
Viene generato un tipo InvalidCastException. |
I confronti numerici considerano Nothing
come 0. I confronti tra stringhe considerano Nothing
come ""
(stringa vuota).
Overload
Gli operatori di confronto relazionale (<
. <=
, >
, >=
, =
, <>
) possono essere sottoposti a overload, il che significa che una classe o una struttura può ridefinire il proprio comportamento quando un operando ha il tipo di tale classe o struttura. Se il codice usa uno di questi operatori in una classe o una struttura di questo tipo, assicurarsi di comprendere il comportamento ridefinito. Per altre informazioni, vedere Operator Procedures.
Si noti che l'operatore = può essere sottoposto a overload solo come operatore di confronto relazionale, non come operatore di assegnazione.
Esempio
Nell'esempio seguente vengono illustrati vari usi di operatori di confronto relazionali, usati per confrontare le espressioni. Gli operatori di confronto relazionali restituiscono un risultato Boolean
che indica se l'espressione dichiarata restituisce True
o meno. Quando si applicano gli operatori >
e <
alle stringhe, il confronto viene eseguito usando il normale ordinamento alfabetico delle stringhe. Questo ordine può dipendere dalla configurazione delle impostazioni locali. Se l'ordinamento fa distinzione tra maiuscole e minuscole o meno dipende dall'impostazione Confronto opzioni.
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
Nell'esempio precedente il primo confronto restituisce False
e i confronti rimanenti restituiscono True
.