Operatori di confronto (Visual Basic)

Di seguito sono riportati gli operatori di confronto definiti in Visual Basic.

Operatore <

Operatore <=

Operatore >

Operatore >=

Operatore =

Operatore <>

Operatore Is

Operatore IsNot

Operatore Like

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.

Vedi anche