Operatory porównania (Visual Basic)
Poniżej przedstawiono operatory porównania zdefiniowane w języku Visual Basic.
<
Operator
<=
Operator
>
Operator
>=
Operator
=
Operator
<>
Operator
Te operatory porównują dwa wyrażenia, aby określić, czy są równe, a jeśli nie, jak się różnią. Is
, IsNot
i Like
są szczegółowo omówione na oddzielnych stronach Pomocy. Operatory porównania relacyjnego zostały szczegółowo omówione na tej stronie.
Składnia
result = expression1 comparisonoperator expression2
result = object1 [Is | IsNot] object2
result = string Like pattern
generatora
result
Wymagany. Wartość Boolean
reprezentująca wynik porównania.
expression1
, expression2
Wymagany. Dowolne wyrażenie.
comparisonoperator
Wymagany. Dowolny operator porównania relacyjnego.
object1
, object2
Wymagany. Wszystkie nazwy obiektów referencyjnych.
string
Wymagany. Dowolne String
wyrażenie.
pattern
Wymagany. Dowolne String
wyrażenie lub zakres znaków.
Uwagi
Poniższa tabela zawiera listę operatorów porównania relacyjnego oraz warunki określające, czy result
ma wartość True
, czy False
.
Operator | True Jeśli |
False Jeśli |
---|---|---|
< (Mniej niż) |
expression1 < expression2 |
expression1 >= expression2 |
<= (Mniejsze niż lub równe) |
expression1 <= expression2 |
expression1 > expression2 |
> (Większe niż) |
expression1 > expression2 |
expression1 <= expression2 |
>= (Większe niż lub równe) |
expression1 >= expression2 |
expression1 < expression2 |
= (Równe) |
expression1 = expression2 |
expression1 <> expression2 |
<> (Nie równa się) |
expression1 <> expression2 |
expression1 = expression2 |
Operator Is
, IsNot
operator i Like
operator mają określone funkcje porównania, które różnią się od operatorów w poprzedniej tabeli.
Porównywanie liczb
Podczas porównywania wyrażenia typu Single
z jednym z typów Double
Single
wyrażenie jest konwertowane na Double
wartość . To zachowanie jest przeciwieństwem zachowania znalezionego w Visual Basic 6.
Podobnie podczas porównywania wyrażenia typu Decimal
z wyrażeniem typu Single
lub Double
wyrażenie Decimal
jest konwertowane na Single
lub Double
. W przypadku Decimal
wyrażeń każda wartość ułamkowa mniejsza niż 1E-28 może zostać utracona. Taka utrata wartości ułamkowej może spowodować, że dwie wartości będą porównywane jako równe, gdy nie są. Z tego powodu należy zachować ostrożność podczas używania równości (=
), aby porównać dwie zmienne zmiennoprzecinkowe. Bezpieczniej jest sprawdzić, czy bezwzględna wartość różnicy między dwiema liczbami jest mniejsza niż niewielka akceptowalna tolerancja.
Imprecision zmiennoprzecinkowa
Podczas pracy z liczbami zmiennoprzecinkowych należy pamiętać, że nie zawsze mają one dokładną reprezentację w pamięci. Może to prowadzić do nieoczekiwanych wyników niektórych operacji, takich jak porównanie wartości i operator mod. Aby uzyskać więcej informacji, zobacz Rozwiązywanie problemów z typami danych.
Porównywanie ciągów
Podczas porównywania ciągów wyrażenia ciągu są oceniane na podstawie ich kolejności sortowania alfabetycznego, która zależy od Option Compare
ustawienia.
Option Compare Binary
porównuje ciągi bazowe w kolejności sortowania pochodzącej z wewnętrznych reprezentacji binarnych znaków. Kolejność sortowania zależy od strony kodowej. W poniższym przykładzie pokazano typową kolejność sortowania binarnego.
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Option Compare Text
porównuje ciągi w kolejności sortowania bez uwzględniania wielkości liter określonego przez ustawienia regionalne aplikacji. Po ustawieniu Option Compare Text
i posortowaniu znaków w poprzednim przykładzie ma zastosowanie następująca kolejność sortowania tekstu:
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
Zależność ustawień regionalnych
Po ustawieniu Option Compare Text
parametru wynik porównania ciągów może zależeć od ustawień regionalnych, w których aplikacja jest uruchomiona. Dwa znaki mogą być porównywane jako równe w jednym ustawieniach regionalnych, ale nie w innym. Jeśli używasz porównania ciągów do podejmowania ważnych decyzji, takich jak zaakceptowanie próby zalogowania się, należy otrzymywać alerty dotyczące poufności ustawień regionalnych. Rozważ ustawienie Option Compare Binary
lub wywołanie StrCompelementu , które uwzględnia ustawienia regionalne.
Programowanie bez typów z operatorami porównania relacyjnego
Użycie operatorów porównania relacyjnego z Object
wyrażeniami nie jest dozwolone w obszarze Option Strict On
. Gdy Option Strict
wartość to Off
, lub expression1
expression2
jest wyrażeniem Object
, typy czasu wykonywania określają sposób ich porównywania. W poniższej tabeli przedstawiono sposób porównywania wyrażeń i wyniku porównania w zależności od typu środowiska uruchomieniowego operandów.
Jeśli operandy są | Porównanie jest |
---|---|
Zarówno String |
Sortuj porównanie na podstawie cech sortowania ciągów. |
Obie wartości liczbowe | Obiekty przekonwertowane na Double , porównanie liczbowe. |
Jedna liczba i jedna String |
Element String jest konwertowany na Double porównanie liczbowe i jest wykonywane. Jeśli nie można przekonwertować elementu String na Double , zostanie zgłoszony element InvalidCastException . |
Oba typy odwołań są inne niż String |
Jest InvalidCastException zgłaszany. |
Porównania liczbowe traktują Nothing
jako 0. Porównania ciągów są traktowane Nothing
jako ""
(ciąg pusty).
Przeciążenie
Operatory porównania relacyjnego (<
. <=
, , >=
>
, =
, <>
) mogą być przeciążone, co oznacza, że klasa lub struktura może ponownie zdefiniować swoje zachowanie, gdy operand ma typ tej klasy lub struktury. Jeśli kod używa dowolnego z tych operatorów w takiej klasie lub strukturze, upewnij się, że rozumiesz ponownie zdefiniowane zachowanie. Aby uzyskać więcej informacji, zobacz Procedury operatorów.
Zwróć uwagę, że operator = może być przeciążony tylko jako operator porównania relacyjnego, a nie jako operator przypisania.
Przykład
W poniższym przykładzie przedstawiono różne zastosowania operatorów porównania relacyjnego, których używasz do porównywania wyrażeń. Operatory porównania relacyjnego zwracają Boolean
wynik reprezentujący, czy wyrażenie określone zwraca wartość True
. Po zastosowaniu >
operatorów i <
do ciągów porównanie jest wykonywane przy użyciu normalnego porządku sortowania alfabetycznego ciągów. Ta kolejność może być zależna od ustawień regionalnych. Określa, czy sortowanie uwzględnia wielkość liter, czy nie, zależy od ustawienia Porównanie opcji.
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
W poprzednim przykładzie pierwsze porównanie zwraca wartość False
, a pozostałe porównania zwracają wartość True
.