§1 等価・不等価演算子

値が等しいかどうか(値の等価性・不等価性)を比較するには、等価演算子=および 不等価演算子<>を使用します。

Dim i As Integer = 7

If i = 5 Then Console.WriteLine("iは5です")
If i <> 5 Then Console.WriteLine("iは5ではありません")

Dim s As String = "abc"

If s = "abc" Then Console.WriteLine("sは'abc'です")
If s <> "abc" Then Console.WriteLine("sは'abc'ではありません")

独自に定義した型の場合、演算子のオーバーロードを行わないと等価演算子・不等価演算子で等価性を比較することはできません。 独自型の比較方法や等価演算子のオーバーロード方法については等価性の定義と比較を参照してください。



§2 関係演算子

値の大小関係を比較するには、関係演算子<, >および<=, >=を使用します。

Dim i As Integer = 7

If i < 5 Then Console.WriteLine("iは5未満です")
If i <= 5 Then Console.WriteLine("iは5以下です")
If i > 5 Then Console.WriteLine("iは5を超えます")
If i >= 5 Then Console.WriteLine("iは5以上です")

Dim s As String = "ABC"

If s < "abc" Then Console.WriteLine("sは'abc'より後ろに並べられます")
If s > "abc" Then Console.WriteLine("sは'abc'より前に並べられます")

独自に定義した型の場合、演算子のオーバーロードを行わないと関係演算子で大小関係を比較することはできません。 独自型の比較方法や関係演算子のオーバーロード方法については大小関係の定義と比較を参照してください。

§3 文字列の比較

大文字小文字を無視した比較の方法など、文字列の比較については文字列の探索・比較 §.比較 (CompareTo, Equals, Compare)および文字列と比較オプション・カルチャの並べ替え規則で詳しく解説しています。

§4 等価演算子と代入

等価演算子=は代入演算子としても動作します。 CやC#のように等価演算子==と代入演算子=を使い分けることができないため、条件式と代入式を記述する場合には注意が必要です。 例えば次のような式a = b = cは、「条件式 b = c の結果を a に代入する」と解釈されます。 「c の値を b と a に代入する」とは解釈されません。

Dim a As Integer = 1
Dim b As Integer = 3
Dim c As Integer = 5

a = b = c

Console.WriteLine("a = {0}, b = {1}, c = {2}", a, b, c)

従って、Option Strict Onの場合は条件式b = cがBoolean型の値となるためその値をInteger型変数であるaには代入できず、コンパイルエラーとなります。 Option Strict Offの場合は条件式b = cの結果はFalseとなるため、FalseをInteger型に変換した値である0aに代入されます。

Option Strict Offの場合の実行結果
a = 0, b = 3, c = 5

演算子=はこのような動作となるため、Ifステートメントなど条件式を記述する箇所では演算子=に代入の動作を行わせることはできません。 次の例のように、Whileステートメントの条件式においてメソッドを呼び出し、その結果を代入した上で比較を行う、といったことはVBではできません。 他の言語で記述されたコードをVBに書き換える際には注意が必要です。

ストリームの終端までデータを読み込む例・VB
Using r As New BinaryReader(File.OpenRead("test.dat"))

  Dim buffer(31) As Byte
  Dim len As Integer

  ' Readメソッドの戻り値を変数に代入し、その値が0でない限り繰り返す
  ' (実際には初回の呼び出しでループから離脱してしまい、
  ' 意図したとおりには動作しない)
  While (len = r.Read(buffer, 0, buffer.Length)) <> 0

    Console.WriteLine("{0}バイト読み込みました", len)

  End While

  Console.WriteLine("終端に到達しました")

End Using
ストリームの終端までデータを読み込む例・C#
using (BinaryReader r = new BinaryReader(File.OpenRead("test.dat")))
{
  byte[] buffer = new byte[32];
  int len;

  // Readメソッドの戻り値を変数に代入し、その値が0でない限り繰り返す
  while ((len = r.Read(buffer, 0, buffer.Length)) != 0)
  {
    Console.WriteLine("{0}バイト読み込みました", len);
  }

  Console.WriteLine("終端に到達しました");
}