Visual Basic で定義されている比較演算子を次に示します。
<
演算子
<=
演算子
>
演算子
>=
演算子
=
演算子
<>
演算子
これらの演算子は、2 つの式を比較して、それらが等しいかどうか、および等しくない場合は、それらがどのように異なるかを判断します。
Is
、 IsNot
、および Like
については、個別のヘルプ ページで詳しく説明します。 関係比較演算子については、このページで詳しく説明します。
構文
result = expression1 comparisonoperator expression2
result = object1 [Is | IsNot] object2
result = string Like pattern
部品
result
必須。 比較の結果を表す Boolean
値。
expression1
、expression2
必須。 任意の式。
comparisonoperator
必須。 任意のリレーショナル比較演算子。
object1
、object2
必須。 参照オブジェクト名。
string
必須。 任意の String
式。
pattern
必須。 任意の String
式または文字範囲。
注釈
次の表に、リレーショナル比較演算子と、 result
が True
か False
かを決定する条件の一覧を示します。
オペレーター |
True もし |
False もし |
---|---|---|
< (未満) |
expression1 < expression2 |
expression1
>= expression2 |
<= (以下) |
expression1
<= expression2 |
expression1 > expression2 |
> (より大きい) |
expression1 > expression2 |
expression1
<= expression2 |
>= (以上) |
expression1
>= expression2 |
expression1 < expression2 |
= (等しい) |
expression1 = expression2 |
expression1 <> expression2 |
<> (等しくない) |
expression1 <> expression2 |
expression1 = expression2 |
注
= 演算子は代入演算子としても使用されます。
Is
演算子、IsNot
演算子、およびLike
演算子には、前の表の演算子とは異なる特定の比較機能があります。
数値の比較
Single
型の式をいずれかの型Double
と比較すると、Single
式はDouble
に変換されます。 この動作は、Visual Basic 6 の動作とは逆です。
同様に、 Decimal
型の式を型 Single
または Double
の式と比較すると、 Decimal
式は Single
または Double
に変換されます。
Decimal
式の場合、1E から 28 未満の小数部の値は失われる可能性があります。 このような小数部の値が失われると、2 つの値が等しくない場合と比較される可能性があります。 このため、等値 (=
) を使用して 2 つの浮動小数点変数を比較するときは注意する必要があります。 2 つの数値の差の絶対値が、許容される許容度の小さい値より小さいかどうかをテストする方が安全です。
浮動小数点の不正確さ
浮動小数点数を使用する場合は、常にメモリ内に正確な表現が存在するとは限らない点に注意してください。 これにより、値の比較や Mod 演算子など、特定の操作によって予期しない結果が発生する可能性があります。 詳細については、「 データ型のトラブルシューティング」を参照してください。
文字列の比較
文字列を比較すると、文字列式は、 Option Compare
の設定に依存するアルファベット順の並べ替え順序に基づいて評価されます。
Option Compare Binary
は、文字の内部バイナリ表現から派生した並べ替え順序に基づいて文字列比較を行います。 並べ替え順序は、コード ページによって決まります。 次の例は、一般的なバイナリ並べ替え順序を示しています。
A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø
Option Compare Text
は、アプリケーションのロケールによって決定される、大文字と小文字を区別しないテキストの並べ替え順序に基づいて文字列比較を行います。 前の例 Option Compare Text
設定して文字を並べ替えると、次のテキストの並べ替え順序が適用されます。
(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)
ロケール依存
Option Compare Text
設定した場合、文字列比較の結果は、アプリケーションが実行されているロケールによって異なります。 2 文字は、1 つのロケールでは等しいが、別のロケールでは等しくないと比較される場合があります。 ログオンの試行を受け入れるかどうかなど、重要な決定を行うために文字列比較を使用している場合は、ロケールの機密性を警告する必要があります。
Option Compare Binary
設定するか、ロケールを考慮してStrCompを呼び出すかを検討してください。
関係比較演算子を使用した型指定なしのプログラミング
Option Strict On
では、Object
式でリレーショナル比較演算子を使用することはできません。
Option Strict
がOff
され、expression1
またはexpression2
がObject
式である場合、実行時の型によって比較方法が決まります。 次の表は、オペランドのランタイム型に応じて、式の比較方法と比較の結果を示しています。
オペランドが | 比較は次の場合です。 |
---|---|
両方とも String |
文字列の並べ替え特性に基づいて比較を並べ替えます。 |
両方の数値 |
Double に変換されたオブジェクト、数値比較。 |
1 つの数値と 1 つの数値 String |
String はDouble に変換され、数値比較が実行されます。
String をDouble に変換できない場合は、InvalidCastExceptionがスローされます。 |
どちらか一方または両方が、〘〗 String |
InvalidCastExceptionがスローされます。 |
数値比較では、 Nothing
は 0 として扱います。 文字列比較では、 Nothing
は ""
(空の文字列) として扱われます。
オーバーロード
関係比較演算子 (<
. <=
、 >
、 >=
、 =
、 <>
) を オーバーロードできます。つまり、オペランドがそのクラスまたは構造体の型を持つ場合、クラスまたは構造体は動作を再定義できます。 コードでこのようなクラスまたは構造体でこれらの演算子のいずれかを使用する場合は、再定義された動作を理解していることを確認してください。 詳細については、「 演算子プロシージャ」を参照してください。
= 演算子は、代入演算子としてではなく、関係比較演算子としてのみオーバーロードできることに注意してください。
例
次の例は、式の比較に使用するリレーショナル比較演算子のさまざまな使用方法を示しています。 関係比較演算子は、指定された式がTrue
に評価されるかどうかを表すBoolean
結果を返します。 文字列に >
演算子と <
演算子を適用すると、文字列の通常のアルファベット順の並べ替え順序を使用して比較が行われます。 この順序は、ロケールの設定によって異なる場合があります。 並べ替えが大文字と小文字を区別するかどうかは、[ オプション比較 ] 設定によって異なります。
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
前の例では、最初の比較は False
を返し、残りの比較は True
を返します。
こちらも参照ください
.NET